Używam Entity Framework 4.2 (Code First), aby uzyskać dostęp do mojej bazy danych. Byłem przy założeniu, że gdybym zapytał podmiot używający SingleOrDefault
, wyszukałby on tylko bazę danych, jeśli encja nie była jeszcze śledzona, ale wydaje się, że tak nie jest. Z drugiej strony wydaje się, że robi to metoda Find
. Problem z Find
polega na tym, że nie pozwala mi załadować powiązanych danych.Entity Framework Code First Find vs SingleOrDefault (Eager Loading)
Czy istnieje sposób korzystania z metody Find
, ale również chętnie ładuje dane? Jako przykład, chcę, aby załadować książkę i wszystkie jego opinii:
// 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);
Z SingleOrDefault
mogę załadować opinie kiedy dostaję książkę korzystając obejmują:
// 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);
Czy istnieje sposób, aby uzyskać zachowanie Find
z chęcią załadowania SingleOrDefault
?
Nie miałem pojęcia, że ta lokalna właściwość istnieje. Dzięki! – Dismissile
Witam, a jeśli chodzi o szybkość operacji, Find vs SingleOrDefault, aby uzyskać informacje o obiekcie? – Patrick