Verwenden von Include in Entity Framework 4 mit Lambda-Ausdrücken

88

Ich habe viele Artikel darüber gesehen, wie man diese Angelegenheit überwinden kann, die sich alle auf CTP4 beziehen oder meine eigenen Erweiterungsmethoden hinzufügen.

Gibt es eine "offizielle" EF4-Methode zur Verwendung von Lambda-Ausdrücken in include (sowohl für Beziehungen der ersten Ebene als auch für Beziehungen der zweiten und höheren Ebene) oder wurde sie schließlich nicht in das RTM aufgenommen?

Es gibt eine - ich würde mich freuen zu lernen, wie es geht, da die Verwendung des Lambda-Ausdrucks in meinem Code jetzt (mit # system.data.entity # system.data.linq) mir immer noch Folgendes gibt:

Der Lambda-Ausdruck kann nicht in den Typ 'string' konvertiert werden, da es sich nicht um einen Delegattyp handelt für:

var customers = from c in
context.Customers.Include(c=>c.Phone)
Dani
quelle
1
Nein, es existiert nicht (abgesehen von CTP4 - wie Sie sagen). Ich benutze Erweiterungsmethoden / Aufzählungen, um die Typensicherheit zu erreichen.
RPM1984
Ich habe das auch getan, also hat MS es in CTP4 aufgenommen und in RTM entfernt?
Dani

Antworten:

228

Die RTM-Version von Entity Framework 4.1 enthält tatsächlich Erweiterungsmethoden in der EntityFramework.dllDatei, um das Laden mit Lambda über die IncludeFunktion zu beschleunigen . Fügen Sie einfach die DLL in Ihr Projekt ein und Sie sollten in der Lage sein, Code wie folgt zu schreiben:

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();

Denken Sie daran, eine Import / Using-Anweisung hinzuzufügen, die den System.Data.Entity- Namespace enthält. Andernfalls kann der Compiler die Erweiterungsmethoden nicht finden. Z.B:

using System.Data.Entity;

Weitere Informationen finden Sie in diesem Blog- Artikel zum ADO.NET-Team .

Cecilphillip
quelle
1
Während der Link zum ADO.net-Blog immer noch relevant ist, lautet die EF6-Referenz / Anleitung für dasselbe Thema: Laden verwandter Entitäten Ich denke, die Dokumentation muss zu Princess- und Unicorn-Beispielen anstelle des von ihnen verwendeten Blogs und Posts wechseln überall.
Arkaine55
1
danke, ich füge nur mit System.Data.Entity hinzu; seine Arbeit mir.
Adnan
Team Blog Link ist tot, dies ist der neue Ort
Nintynuts
89

Obwohl dies in der Frage impliziert ist, stellen Sie für alle anderen Personen, die das gleiche Problem haben, bei denen sie keine Lambdas mit .Include verwenden können, Folgendes sicher:

using System.Data.Entity;
AaronLS
quelle
5

Nein, es gibt derzeit keine offizielle Unterstützung für Include with Lambda Expression in RTM. Ich benutze das .

Wenn wir über CTP4 sprechen, meinen wir Entity Framework Feature. Es ist eine neuere API als EF4. Es enthält hauptsächlich Code First und einige andere Verbesserungen.

Ladislav Mrnka
quelle
Irgendeine Idee, wann MS diese Funktion unterstützen wird? Ich verstehe, dass all diese Erweiterungsmethoden ein Leistungsproblem mit großen / mehrstufigen Objekten haben - da sie bei jedem Aufruf von include immer wieder durchlaufen müssen und der Objektdefinitionsbaum konstant ist und zwischengespeichert werden kann, gibt es keine Lösung wie das noch.
Dani
Die Entity Framework-Funktion befindet sich derzeit in CTP5. Ich denke, die RTM-Version sollte im ersten Quartal 2011 veröffentlicht werden. Hoffentlich enthält sie Include mit Lambda-Ausdruck, aber ich habe die Implementierung noch nicht überprüft, daher kann ich nicht sagen, ob sie irgendeine Art von Caching verwendet.
Ladislav Mrnka
31
Diese Antwort ist ab EF 4.3.x falsch. Die anderen Antworten sind richtig, man muss System.Data.Entity verwenden , um die Überladung mit Lamda-Ausdrücken zu erhalten.
Eric J.
1
@ EricJ: Ja. Das stark typisierte Include ist seit EF 4.1 verfügbar.
Ladislav Mrnka