Contexte :
Lors du chargement impatient d'entités associées dans Entity Framework Core, les utilisateurs peuvent être confrontés à des problèmes lorsque les entités imbriquées restent vides. Ce problème nécessite l'inclusion manuelle de chaque entité associée, ce qui devient peu pratique pour les relations d'entités complexes.
Problème :
Les utilisateurs ont besoin d'un moyen de charger automatiquement toutes les entités associées imbriquées. entités dans Entity Framework Core 2.0.1, éliminant le besoin d'inclusion explicite à l'aide de Include() et ThenInclude().
Solution :
Extensions personnalisées :
Comme cette fonctionnalité n'est pas prise en charge de manière native dans EF Core 2.0 .1, des méthodes d'extension personnalisées peuvent être utilisées :
public static partial class CustomExtensions { 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)); } public static IEnumerable<string> GetIncludePaths(this DbContext context, Type clrEntityType, int maxDepth = int.MaxValue) { // Implementation for recursive traversal and path collection } }
Utilisation dans Dépôt générique :
Dans la méthode GetAllAsync() du référentiel générique, l'extension GetIncludePaths() peut être utilisée pour déterminer et inclure automatiquement toutes les entités associées :
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(); }
Notes supplémentaires :
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!