上下文:
在 Entity 中预加载相关实体时Framework Core,当嵌套实体仍未填充时,用户可能会遇到问题。此问题需要手动包含每个相关实体,这对于复杂的实体关系来说变得不切实际。
问题:
用户需要一种方法来自动预先加载所有嵌套的相关实体Entity Framework Core 2.0.1 中的实体,无需使用 Include() 和显式包含然后包含().
解决方案:
自定义扩展:
因为 EF Core 2.0 本身不支持此功能.1、自定义扩展方法即可使用:
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 } }
在通用存储库中的使用:
在通用存储库的 GetAllAsync() 方法中,可以利用 GetIncludePaths() 扩展来自动确定和包含所有相关实体:
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 中的所有嵌套实体?的详细内容。更多信息请关注PHP中文网其他相关文章!