コンテキスト:
エンティティ内の関連エンティティのイーガー ロード時Framework Core では、ネストされたエンティティが未設定のままであると、ユーザーは問題に直面する可能性があります。この問題では、各関連エンティティを手動で含める必要がありますが、複雑なエンティティ関係では現実的ではありません。
問題:
ユーザーは、ネストされたすべての関連エンティティを自動的に一括ロードする方法が必要です。 Entity Framework Core 2.0.1 のエンティティを使用すると、Include() とthenInclude().
解決策:
カスタム拡張機能:
この機能は 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 中国語 Web サイトの他の関連記事を参照してください。