include
не работает после того, как я выполню выбор на IQueryable
запрос. Существует ли путь вокруг этого? Мой запрос
public IQueryable<Network> GetAllNetworks()
{
var query = (from n in _db.NetworkSet
.Include("NetworkContacts.Contact")
.Include("NetworkContacts.Contact.RelationshipSource.Target")
.Include("NetworkContacts.Contact.RelationshipSource.Source")
select (n));
return query;;
}
Я затем пытаюсь заполнить свой ViewModel в моем уровне WebUI с помощью следующего кода
var projectedNetworks =
from n in GetAllNetworks()
select new NetworkViewModel
{
Name = n.Name,
Contacts = from contact in networkList
.SelectMany(nc => nc.NetworkContacts)
.Where(nc => nc.Member == true)
.Where(nc => nc.NetworkId == n.ID)
.Select(c => c.Contact)
select contact,
};
return projectedNetworks;
Проблема теперь происходит в мой недавно созданный NetworkViewModel
; Contacts
объекты коллекции не включают загруженных данных для RelationshipSource.Target
или RelationshipSource.Source
.
Однако данные там, когда выполнено из исходного Репозитория IQueryable
метод. Однако связанное include
данные, кажется, не переданы в новое Contacts
набор, который создается, когда я использую Select New NetworkViewModel {}
.
Есть ли способ сохранить это Include
данные, когда это передается в новый объект? В данный момент я просто продолжаю добираться Null
исключения
Вот объяснение того, что происходит, с обходным решением.
В вашем случае, однако, я думаю, есть лучшее обходное решение, чем то, что описано в статье по ссылке. Вы уже используете модель представления для Network
. Это хорошо! Сделайте это и для контакта (и связанных с ним свойств), и ваши проблемы с нетерпеливой загрузкой волшебным образом исчезнут. Проекция always работает.