2009-06-01 4 views
2

У меня есть следующий запрос:LINQ к Entity Framework много-много жадная загрузка выпуска

var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers") 
       where e.Customers.ID == customer.ID 
       select e; 

И все работает, я получаю мои оборудование и загружает таблицу Производителей правильно (с нетерпением). Но когда я пытаюсь сделать следующее многие-ко-многим запрос:

var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers") 
       where e.Customers.ID == customer.ID 
       from cce in e.ContractEquipments 
       where cce.Contracts.EndedOn >= DateTime.Today 
       select e; 

где «ContractEquipments» многие-ко-многим поиска между «Оборудования» и «Контракты», но при выполнении этого запроса, Таблица производителей больше не загружается. Любая идея, как это исправить, не выполнив следующие действия:

if (MyEntity.Manufacturers.IsLoaded == false) 
    MyEntity.ManufacturersReference.Load() 

Этот проект занимает часов выполнить, и я хочу, чтобы сохранить количество баз данных вызывает вниз.

EDIT # 1:

Я также попытался это без успеха:

var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers") 
       where e.Customers.ID == customer.ID 
       join cce in ContractContext.ContractEquipments 
       on e.ID equals cce.Equipments.ID 
       where cce.Contracts.EndedOn >= DateTime.Today 
       select e; 

ответ

7

Early включает в себя часто теряются на некоторых типах запросов (т.е. с дополнительной присоединяется и т.д.)

Способ обойти это, чтобы сделать запрос, (а потом так долго, как вы возвращающиеся лица т.е. выбрать е, а не проекция т.е. Выбрать новый {...}) можно привести к ObjectQuery и сделать включают вокруг снаружи:

var MyQuery = ((from e in ContractContext.Equipments 
       where e.Customers.ID == customer.ID 
       from cce in e.ContractEquipments 
       where cce.Contracts.EndedOn >= DateTime.Today 
       select e) as ObjectQuery<Equipment>).Include("Manufacturers"); 

Это должно работать.

Если вы заинтересованы в дополнительной информации об этом, проверьте Tip 22 - How to make Include really Include

Алекс

+0

Спасибо, чувак, работал как шарм. – JasonRShaver

+0

Просто интересно, не в том, нужно ли включать раннее, чтобы добавить какую-то функциональность для этого объекта в самом запросе? Например, если вы хотите включить («Производители») и включить его в предложение where, если вы хотите получить список связанных производителей, найденных в Нью-Йорке, например. – sksallaj

0

вы пробовали присоединиться вместо как это?

var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers") 
       where e.Customers.ID == customer.ID 
       join cce in e.ContractEquipments on e.Id equals cce.EquipmentId 
       where cce.Contracts.EndedOn >= DateTime.Today 
       select e; 
+0

Я просто попытался это и это не сработало. См. Edit # 1 выше. – JasonRShaver

+0

Что он возвращает? – bytebender

 Смежные вопросы

  • Нет связанных вопросов^_^