Использование .Include() при присоединении к представлению с помощью Entity FrameworkC#

Место общения программистов C#
Ответить
Anonymous
 Использование .Include() при присоединении к представлению с помощью Entity Framework

Сообщение Anonymous »

Я использую индексированное представление, которое представляет собой объект без каких-либо связей (связи с объектами моей таблицы были бы предпочтительнее, но добиться этого оказалось практически невозможно). Это представление состоит из 4 ФК, которые вместе образуют ПК:
PortalID
CategoryID
BranchID
CompanyID

Теперь я присоединяюсь к этому представлению, чтобы выбрать такой набор компаний:
var companies = (from c in database.Companies.FindAll().Include("City")
join l in database.CompanyList.FindAll() on c.ID equals l.CompanyID
where l.PortalID == 9 && l.BranchID == 1597
select c).Take(10);

Субъект «Компания» имеет связь с таблицей «Города» (CityID, City), которую я хочу включить, и работает отлично. Однако, когда я присоединяюсь к представлению, .Include() полностью игнорируется и, таким образом, приводит к запросу без соединения с таблицей городов.
Как вы могли сделать вывод, я использую шаблон репозитория, а FindAll() возвращает IQueryable, и я вручную добавил расширение Include в IQueryable следующим образом:
public static IQueryable Include(this IQueryable sequence, string path) {
var objectQuery = sequence as ObjectQuery;
if (objectQuery != null)
return objectQuery.Include(path);

return sequence;
}

Я тщательно протестировал это расширение, и оно работает так, как должно.
Итак, теперь мой вопрос: почему оно игнорирует операцию Include в конечном дереве выражений и как я могу предотвратить это?

ОБНОВЛЕНИЕ:

Я получил решение по следующей ссылке:
https://learn.microsoft.com/en-us/archi ... ly-include
Что говорит о том, что мне нужно переписать свой запрос следующим образом:
var companies = (from c in database.Companies.GetAll()
join l in database.CompanyList.GetAll() on c.ID equals l.CompanyID
where l.PortalID == 9 && l.BranchID == 1597
select c).Include("City").Take(10);


Подробнее здесь: https://stackoverflow.com/questions/397 ... -framework
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»