Ich habe versucht, viel zu recherchieren, aber ich bin eher ein DB-Typ - daher macht selbst die Erklärung im MSDN für mich keinen Sinn. Kann jemand bitte erklären und einige Beispiele dafür geben, was die Include()
Aussage im Begriff der SQL
Abfrage bewirkt ?
93
Antworten:
Angenommen, Sie möchten eine Liste aller Ihrer Kunden erhalten:
Nehmen wir an, dass jedes
Customer
Objekt einen Verweis auf seine Menge vonOrders
hat und dass jedesOrder
Verweise Verweise hat, aufLineItems
die auch a verweisen kannProduct
.Wie Sie sehen können, kann die Auswahl eines Objekts der obersten Ebene mit vielen verwandten Entitäten zu einer Abfrage führen, bei der Daten aus vielen Quellen abgerufen werden müssen. Mit dieser Option
Include()
können Sie als Leistungsmaß angeben, welche verwandten Entitäten als Teil derselben Abfrage aus der Datenbank gelesen werden sollen.Wenn Sie dasselbe Beispiel verwenden, werden möglicherweise alle zugehörigen Auftragskopfzeilen eingefügt, jedoch keiner der anderen Datensätze:
Als letzter Punkt, seit Sie nach SQL gefragt haben, könnte die erste Anweisung ohne
Include()
eine einfache Anweisung generieren:Die letzte Anweisung, die aufgerufen wird,
Include("Orders")
könnte folgendermaßen aussehen:quelle
LineItems
undProducts
die LINQ - Abfrage sollte wie folgt aussehen:var customersWithOrderDetail = context.Customers.Include("Orders").Include("LineItems").Include("Products").ToList();
?Include()
, um Objekte entlang unterschiedlicher "Pfade" zu erfassen. Wenn Sie Objekte im selben Pfad möchten, müssen Sie nur einen Aufruf ausführen, der den gesamten Pfad angibt. DaLineItems
undProducts
keine Pfadkomponenten gemeinsam nutzen, benötigen Sie separate Aufrufe.Ich wollte nur hinzufügen, dass "Include" Teil des eifrigen Ladens ist. Es wird im Entity Framework 6-Lernprogramm von Microsoft beschrieben. Hier ist der Link: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/reading-related-data-with-the -entity-Framework-in-einer-Asp-Net-MVC-Anwendung
Auszug aus der verlinkten Seite:
quelle
Stellen Sie sich vor, Sie erzwingen das Eager-Laden in einem Szenario, in dem Ihre Unterelemente ansonsten verzögert geladen würden.
Die Abfrage, die EF an die Datenbank sendet, führt zunächst zu einem größeren Ergebnis. Beim Zugriff werden jedoch keine weiteren Abfragen beim Zugriff auf die enthaltenen Elemente durchgeführt.
Ohne diese Funktion würde EF jedoch später separate Abfragen ausführen, wenn Sie zum ersten Mal auf die Unterelemente zugreifen.
quelle