Maison >développement back-end >C++ >Comment puis-je charger efficacement des entités imbriquées dans Entity Framework Core 2.0.1 ?
Chargement hâtif des entités imbriquées dans Entity Framework Core 2.0.1
Dans Entity Framework Core 2.0.1, le chargement hâtif des entités imbriquées est pas une fonctionnalité intégrée. Cela devient problématique lors du chargement d'entités avec plusieurs niveaux de relations, ce qui entraîne des valeurs nulles pour les entités liées imbriquées les unes dans les autres.
Pour relever ce défi, une méthode d'extension personnalisée peut être utilisée :
public static IQueryable<T> Include<T>(this IQueryable<T> source, IEnumerable<string> navigationPropertyPaths) where T : class { return navigationPropertyPaths.Aggregate(source, (query, path) => query.Include(path)); }
Cette méthode permet un chargement rapide de plusieurs propriétés de navigation spécifiées sous forme de chaînes.
Une autre méthode d'extension personnalisée peut être utilisée pour générer des chemins à inclure en fonction du type d'entité. métadonnées :
public static IEnumerable<string> GetIncludePaths(this DbContext context, Type clrEntityType, int maxDepth = int.MaxValue) { // Implementation omitted for brevity }
Cette méthode prend un type d'entité et une profondeur maximale facultative et renvoie une liste de chemins d'inclusion.
En incorporant ces méthodes d'extension dans la méthode générique du référentiel :
public virtual async Task<IEnumerable<T>> GetAllAsync(Expression<Func<T, bool>> predicate = null) { var query = Context.Set<T>() .Include(Context.GetIncludePaths(typeof(T)); if (predicate != null) query = query.Where(predicate); return await query.ToListAsync(); }
Il est désormais possible de charger avec impatience des entités associées imbriquées dans Entity Framework Core 2.0.1. Cette approche fournit un mécanisme de chargement rapide plus complet, éliminant le besoin d'instructions Include et ThenInclude explicites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!