Linq-to-entity - метод Include () не загружается

entity-framework linq

Вопрос

Если я использую объединение, метод Include () больше не работает, например:

from e in dc.Entities.Include("Properties")
join i in dc.Items on e.ID equals i.Member.ID
where (i.Collection.ID == collectionID) 
select e

e.Properties не загружен

Без объединения работает Include ()

подветренный

Принятый ответ

ОБНОВЛЕНИЕ: На самом деле я недавно добавил еще один совет, который охватывает это, и предоставляет альтернативное, вероятно, лучшее решение. Идея состоит в том, чтобы отложить использование Include () до конца запроса, см. Это для получения дополнительной информации: Совет 22 - Как сделать включение действительно включенным


Существует известное ограничение в Entity Framework при использовании Include (). Некоторые операции просто не поддерживаются с помощью Include.

Похоже, вы столкнулись с одним из этих ограничений, чтобы обойти это, вы должны попробовать что-то вроде этого:

var results = 
   from e in dc.Entities //Notice no include
   join i in dc.Items on e.ID equals i.Member.ID
   where (i.Collection.ID == collectionID) 
   select new {Entity = e, Properties = e.Properties};

Это вернет свойства, и если отношение между сущностью и свойствами будет одно ко многим (но не много ко многим), вы обнаружите, что каждый результирующий анонимный тип имеет одинаковые значения в:

anonType.Entity.Properties
anonType.Properties

Это побочный эффект функции в Entity Framework, называемой исправлением отношений.

См. Этот совет 1 в моей серии EF Tips для получения дополнительной информации.


Популярные ответы

Попробуй это:

var query = (ObjectQuery<Entities>)(from e in dc.Entities
            join i in dc.Items on e.ID equals i.Member.ID
            where (i.Collection.ID == collectionID) 
            select e)

return query.Include("Properties") 


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow