问题:
急切加载 Entity Framework 中的所有嵌套相关实体Core 2.0.1 已被证明具有挑战性。具体来说,嵌套实体(例如订单实体的“客户”和“地址”)尽管尝试加载,但仍保持为空。
尝试:
已尝试各种方法但没有成功,包括:
解决方案:
目前,EF Core 中没有内置功能用于默认情况下预先加载所有嵌套相关实体。但是,有一些自定义扩展方法可以提供此功能:
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) { // 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 中预加载所有嵌套实体?的详细内容。更多信息请关注PHP中文网其他相关文章!