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)

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 .


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;

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.