質問: db.Blogs.Find(1); db.Entry(blog).Collection(b => b.Posts).Load(); db.Entry(blog).Reference(b => b.Author).Load(); } ``` これは明らかに冗長であり、私は毎回これらのチェックをしたくありません。これらの欠点を回避するための拡張メソッドや補完的なNuGetパッケージはありますか? これはよくある質問ですが、EFコアではありません。 EntityFramework Eagerすべてのナビゲーションプロパティをロードする
回答: コメントで述べたように、私はかなり自信があります(私のEFコアの使用は限られていますが)。これは、ナビゲーションプロパティの標準的なマッピングによって自動的に実行できないということです。また、 `.Load`を使用すると、レイジーローディングナビゲーションプロパティ自体を使用するのと同じように、複数のクエリを実行するように`.Include`を使用するよりも、効率が悪く(またはるかに長い)。 質問ごとに毎回チェックをしたくないという問題に、私が考えることができる2つの方法があります。最初は`Blog`エンティティの読み込みには特に役立ちますが、もう1つは他のユーザーに再利用できるが、読み込みに変更が必要です。 1;すべての関連エンティティをロードするための拡張メソッド。 ``` public static IQueryable EagerWhere(this DbSet dbset, Expression> expr) { return dbset .Include(m => m.Posts) .Include(m => m.Author) .Where(expr); } // .. usage db.Blogs.EagerWhere(m => m.Id == 1); ``` (私はこれを`EagerWhere`と書いていますので、クエリをより詳細に制御できるので、単純な`Find`置換ではなく再利用が可能です) 2;カスタム属性を記述し、 `.Find(..)`と同じアクションを実行するが、Reflectionを使用してカスタム属性でプロパティを検索し、それらを`.Include(..)`再帰的に渡す、上記と同様のメソッドを記述します。 私は、(通常)限られた数のエンティティが作成されているため、その努力をする価値があるかどうかわからないので、その例を書いていません。