適切な Include ステートメントを追加して熱心な読み込みを強制し、データベースに対して行うクエリの数を減らすことで、いくつかの db 層関数を高速化しようとしています。
ただし、90% のケースで、必要なインクルードを入力するための正しい「開始位置」にいないという問題に遭遇します。
私が思いつくことができる最も簡単な例:
Department、Course、およびStudentエンティティがあり、それらの間に多対多の関係があります(一部のコースから複数の部門へ)。
今、私は機能を持っています
GetMasterCourses(Department dep)
次のようなことをします
return dep.Courses.Where(c => c.level == "Master")
問題は、照会された各コースに関連付けられたすべての学生をロードするように EF に指示するにはどうすればよいかということです。
私が見つけた唯一の解決策は、次のようなものです。
courseIDs = dep.Courses
.Where(c => c.level == "Master").Select(c => c.courseID)
dbcontext.Courses
.Include("Students")
.Where(c => courseIDs.Contains(c.courseID) and c.level == Master)
正しいインクルードを指定できるようにするためだけに、このような回避策を実行しなければならないのは、かなりばかげているようです。インクルードの多くの例を見て、stackoverflow で多くの質問を検索しましたが、この問題を抱えている人を実際に見つけることはできません。