Entity Framework Code First Find и SingleOrDefault (Eager Loading)

Я использую 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?

14
задан SanyTiger 12 February 2015 в 11:18
поделиться