データベースにアクセスするために Entity Framework 4.2 (Code First) を使用しています。SingleOrDefault
エンティティを使用してクエリを実行すると、エンティティがまだ追跡されていない場合にのみデータベースをクエリすると想定していましたが、そうではないようです。一方Find
、メソッドはこれを行っているようです。問題Find
は、関連するデータをロードできないように見えることです。
メソッドを使用するFind
だけでなく、熱心にデータをロードする方法はありますか? 例として、本とそのすべてのレビューをロードしたいとします。
// Load book from the database
Book book = context.Books.Find(1);
context.Entry<Book>(book).Collection<Review>.Load(); // Book.Reviews is now populated
// Load book from the change tracker
// This will include all Reviews as well
Book book2 = context.Books.Find(1);
SingleOrDefault
インクルードを使用して本を取得したときにレビューを読み込むことができます。
// Load book + reviews from the database
Book book = Book.Include("Reviews").SingleOrDefault(b => b.Id == 1);
// Doing the same thing again requeries the database
Book book2 = Book.Include("Reviews").SingleOrDefault(b => b.Id == 1);
Find
の熱心な読み込みでの動作を取得する方法はありSingleOrDefault
ますか?