Stellen Sie sich drei Entitäten (Kunde, Buch, Autor) vor, die wie folgt zusammenhängen:
Ein Kunde hat viele Bücher
Ein Buch hat einen Autor
Ich verwende diese Daten, um einen Bericht wie folgt zu drucken:
Customer: Peter
Book: To Kill a Mockingbird - Author: Harper Lee
Book: A Tale of Two Cities - Author: Charles Dickens
Customer: Melanie
Book: The Hobbit - Author: J. R. R. Tolkien
Wenn ich nach Kunden frage, erhalte ich erwartungsgemäß eine Reihe von Anfragen der folgenden Art
Ich kann die Anzahl der Abfragen reduzieren, indem ich die Bücher so einbinde:
var customers = db.Customers.Include (c => c.Books);
Aber ich weiß nicht, wie ich die dritte Ebene laden soll (Author). Wie kann ich das machen?
Es gibt eine Überladung für Include
, die eine Zeichenfolge akzeptiert, die den vollständigen Pfad zu zusätzlichen Eigenschaften angibt, die Sie benötigen:
var customers = db.Customers.Include("Books.Author");
Es sieht seltsam aus, weil "Author" keine Eigenschaft in einer Sammlung von Büchern ist (eher eine Eigenschaft in jedem einzelnen Buch), aber es funktioniert. Mach einen Wirbel.
Es ist auch nicht notwendig, die Stringüberladung zu verwenden. Diese Methode wird auch funktionieren:
var customers = db.Customers.Include(c => c.Books.Select(b => b.Author));
Weitere Beispiele finden Sie im Blog-Beitrag des EF-Teams: http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part -6-ladebezogene Entitäten.aspx
Und dieses Tutorial: http://www.asp.net/entity-framework/tutorials/reading-related-daten-mit-the-entity-framework-in-an-aspaspnet-mvc-application
Sie können das Schlüsselwort ThenInclude
verwenden:
var customers = db.Customers.Include(c => c.Books).ThenInclude(book => book.Author));}