У меня есть следующий запрос:
var MyQuery = from e in ContractContext.Equipments.Include("Manufacturers")
where e.Customers.ID == customer.ID
select e;
И все работает, я получаю свое оборудование, и он загружает таблицу Производителей правильно (с нетерпением). Но когда я пытаюсь выполнить следующий запрос many-to-many:
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" - это многозначный поиск между "Equipments" и "Contracts", но когда этот запрос выполняется, таблица "Производители" больше не загружается. Любая идея, как исправить это, не делая следующее:
if (MyEntity.Manufacturers.IsLoaded == false)
MyEntity.ManufacturersReference.Load()
В этом проекте выполняется несколько часов, и я хочу, чтобы количество обращений к базе данных было меньше.
ИЗМЕНИТЬ № 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;
Раньше часто заблуждаются в некоторых типах запросов (т.е. с дополнительными объединениями и т.д.)
Чтобы обойти это, нужно выполнить запрос (и затем, пока вы возвращаете объекты, т.е. выбираете e, а не проекцию, то есть выберите новый {...}), который вы можете применить к 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");
Это должно работать.
Если вас интересует более подробная информация об этом, ознакомьтесь с Совет 22 - Как включить Включить действительно Включить
Алекс
Попробовали ли вы присоединиться к этому?
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;