Entity Framework Core 2.0.1 中嵌套实体的急切加载
在 Entity Framework Core 2.0.1 中,嵌套实体的急切加载是不是内置功能。当加载具有多个关系级别的实体时,这会成为问题,导致相互嵌套的相关实体出现空值。
要解决此挑战,可以使用自定义扩展方法:
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 omitted for brevity }
此方法采用实体类型和可选的最大深度,并返回包含路径的列表。
通过将这些扩展方法合并到通用存储库方法中:
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(); }
现在可以在 Entity Framework Core 2.0.1 中急切加载嵌套的相关实体。这种方法提供了更全面的急切加载机制,消除了显式 Include 和 ThenInclude 语句的需要。
以上是如何在 Entity Framework Core 2.0.1 中高效地预加载嵌套实体?的详细内容。更多信息请关注PHP中文网其他相关文章!