Ich benutze Entity Framework 4.2 (Code First), um auf meine Datenbank zuzugreifen. Ich war unter der Annahme, dass, wenn ich eine Entität mit SingleOrDefault
abgefragt habe, würde es nur die Datenbank abfragen, wenn die Entität nicht bereits verfolgt wurde, aber dies scheint nicht der Fall zu sein. Die Methode Find
scheint dies zu tun. Das Problem mit Find
ist, dass es mir nicht zulässt, damit verbundene Daten zu laden.Entitätsframework-Code Erste Suche vs SingleOrDefault (Eager Loading)
Gibt es eine Möglichkeit, die Find
Methode zu verwenden, aber auch Daten eifrig zu laden? Als Beispiel möchte ich ein Buch und alle seine Bewertungen laden:
// 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);
Mit SingleOrDefault
ich die Bewertungen laden kann, wenn ich das Buch bekommen mit einbeziehen:
// 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);
Gibt es eine Möglichkeit zu Holen Sie sich das Verhalten von Find
mit dem eifrigen Laden von SingleOrDefault
?
Hatte keine Ahnung, dass diese lokale Eigenschaft existiert. Vielen Dank! – Dismissile
Hallo, und in Bezug auf die Geschwindigkeit der Operation, Find vs SingleOrDefault, um die Entity-Informationen zu erhalten? – Patrick