Я использую индексированное представление, которое представляет собой объект без каких-либо связей (связи с объектами моей таблицы были бы предпочтительнее, но добиться этого оказалось практически невозможно). Это представление состоит из 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
Использование .Include() при присоединении к представлению с помощью Entity Framework ⇐ C#
Место общения программистов C#
1769424221
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 в конечном дереве выражений и как я могу предотвратить это?
[b]ОБНОВЛЕНИЕ:[/b]
Я получил решение по следующей ссылке:
https://learn.microsoft.com/en-us/archive/blogs/alexj/tip-22-how-to-make-include-really-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);
Подробнее здесь: [url]https://stackoverflow.com/questions/3976563/using-include-when-joining-a-view-using-entity-framework[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия