Używanie Include in Entity Framework 4 z wyrażeniami lambda


88

Widziałem wiele artykułów o tym, jak rozwiązać tę sprawę, wszystkie związane z CTP4 lub dodaniem własnych metod rozszerzających.

Czy istnieje „oficjalny” sposób użycia wyrażeń lambda w EF4 wewnątrz include (zarówno dla relacji pierwszego poziomu, jak i drugiego i wyższego poziomu), czy też ostatecznie nie został uwzględniony w RTM?

Jest jeden - z przyjemnością się dowiem, jak to zrobić, ponieważ użycie wyrażenia lambda w moim kodzie teraz (z # system.data.entity # system.data.linq) nadal daje mi:

Nie można przekonwertować wyrażenia lambda na typ „ciąg”, ponieważ nie jest to typ delegata w:

var customers = from c in
context.Customers.Include(c=>c.Phone)

1
nie, nie istnieje (poza CTP4 - jak mówisz). Używam metod / wyliczeń rozszerzających, aby osiągnąć bezpieczeństwo typu.
RPM 1984,

Ja też to zrobiłem, więc MS umieścił to w CTP4 i usunął w RTM?
Dani

Odpowiedzi:


229

Wersja RTM Entity Framework 4.1 w rzeczywistości zawiera metody rozszerzające w EntityFramework.dllpliku, do szybkiego ładowania z lambdą za pośrednictwem Includefunkcji. Po prostu dołącz bibliotekę DLL do swojego projektu i powinieneś być w stanie napisać kod taki jak:

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

Pamiętaj, aby dodać instrukcję Import / Using w celu uwzględnienia przestrzeni nazw System.Data.Entity . W przeciwnym razie kompilator nie może znaleźć metod rozszerzających. Na przykład:

using System.Data.Entity;

Aby uzyskać więcej informacji, zobacz ten artykuł w blogu zespołu ADO.NET .


1
Chociaż odsyłacz do bloga ADO.net jest nadal aktualny, odnośnik / przewodnik dotyczący EF6 na ten sam temat to: Ładowanie powiązanych jednostek Myślę, że dokumentacja musi zostać przełączona na przykłady Księżniczek i Jednorożców zamiast na Blog i Post, z których korzystali wszędzie.
Arkaine55

1
dzięki, po prostu dodaję za pomocą System.Data.Entity; jego praca mnie.
adnan

Link do bloga zespołu jest martwy, to jest nowa lokalizacja
Nintynuts

89

Chociaż jest to sugerowane w pytaniu, dla każdego, kto ma ten sam problem, w którym nie mogą używać lambd z. Uwzględnij, upewnij się, że masz to:

using System.Data.Entity;

5

Nie, w tej chwili nie ma oficjalnej obsługi Uwzględnij z wyrażeniem lambda w RTM. Używam tego .

Kiedy mówimy o CTP4, mamy na myśli funkcję Entity Framework. Jest nowszy niż EF4. Zawiera głównie Code First i kilka innych ulepszeń.


Masz jakiś pomysł, kiedy MS będzie obsługiwać tę funkcję? Rozumiem, że wszystkie te metody rozszerzające mają problem z wydajnością w przypadku dużych / wielopoziomowych obiektów - ponieważ muszą wielokrotnie przechodzić przez każde wywołanie dołączenia, a drzewo „definicji” obiektu jest stałe i może być buforowane, nie ma rozwiązania takiego jak to jeszcze.
Dani

Entity Framework Feature jest obecnie w CTP5. Wydaje mi się, że wersja RTM powinna zostać wydana w pierwszym kwartale 2011 roku. Mam więc nadzieję, że będzie zawierać Include z wyrażeniem lambda, ale nie sprawdziłem jeszcze jej implementacji, więc nie mogę powiedzieć, czy używa jakiegokolwiek rodzaju buforowania.
Ladislav Mrnka

31
Ta odpowiedź jest błędna od EF 4.3.x. Inne odpowiedzi są poprawne, trzeba było użyć System.Data.Entity, aby uzyskać przeciążenie wyrażeniami lamda.
Eric J.

1
@EricJ: Tak. Silnie wpisane Include jest dostępne od EF 4,1.
Ladislav Mrnka
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.