上下文:
在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中文網其他相關文章!