Використання Include in Entity Framework 4 з лямбда-виразами


88

Я бачив багато статей про те, як подолати цю справу, всі пов’язані з CTP4, або додаючи власні методи розширення.

Чи існує "офіційний" спосіб включення EF4 для використання лямбда-виразів всередині include (як для відносин першого рівня, так і для 2-го та більше рівня), чи врешті-решт він не був включений до RTM?

Він є один - я був би радий дізнатися, як це зробити, оскільки використання лямбда-виразу в моєму коді зараз (з # system.data.entity # system.data.linq) все ще дає мені:

Неможливо перетворити лямбда-вираз у тип "рядок", оскільки це не тип делегата:

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

1
ні, він не існує (крім CTP4 - як ви кажете). Я використовую методи розширення / перелічення для досягнення безпеки типу.
RPM1984

Я теж це зробив, тому MS включила його на CTP4 і видалила в RTM?
Дані

Відповіді:


229

Версія RTM Entity Framework 4.1 насправді включає методи розширення у EntityFramework.dllфайлі для нетерплячого завантаження за допомогою Includeфункції лямбда . Просто включіть DLL у свій проект, і ви зможете написати код, наприклад:

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

Не забудьте додати оператор Імпорт / Використання, щоб включити простір імен System.Data.Entity . В іншому випадку компілятор не може знайти методи розширення. Наприклад:

using System.Data.Entity;

Докладнішу інформацію див. У цій статті блогу команди ADO.NET .


1
Незважаючи на те, що посилання на блог ADO.net все ще актуальне, довідник / керівництво EF6 для тієї ж теми: Завантаження пов’язаних організацій. Я думаю, що документація повинна перейти на приклади принцеси та єдинорога замість блогу та публікації, які вони використовували. скрізь.
Arkaine55

1
дякую, я просто додаю за допомогою System.Data.Entity; його робота мені.
Аднан

посилання на блог команди мертве, це нове місце
Nintynuts,

89

Незважаючи на те, що це мається на увазі у питанні, для всіх, хто має таку ж проблему, коли вони не можуть використовувати лямбди з.

using System.Data.Entity;

5

Ні, наразі в RTM немає офіційної підтримки Include з лямбда-виразом. Я цим користуюся .

Коли ми говоримо про CTP4, ми маємо на увазі функцію Entity Framework. Це новіший API, ніж EF4. В основному він включає Code First та кілька інших удосконалень.


Будь-яка ідея, коли MS підтримуватиме цю функцію? Я розумію, що всі ці методи розширення мають проблему продуктивності з великим / багаторівневим об'єктом - оскільки їм потрібно знову і знову обходити кожен виклик для включення, і хоча дерево "визначення" об'єкта є постійним і може бути кешоване, рішення не існує, як це ще.
Дані

Функція Entity Framework наразі знаходиться в CTP5. Я думаю, версія RTM повинна бути створена в першому кварталі 2011 року. Тому, сподіваюся, вона буде містити Включити з лямбда-виразом, але я ще не перевіряв його реалізацію, тому я не можу сказати, чи використовує якийсь кеш.
Ladislav Mrnka

31
Ця відповідь є неправильною, починаючи з EF 4.3.x. Інші відповіді правильні, один повинен використовувати System.Data.Entity, щоб отримати перевантаження виразами lamda.
Ерік Дж

1
@EricJ: Так. Сильно набраний Include доступний з EF 4.1.
Ладіслав Мрнка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.