Если я выбираю из IQueryable затем, Включение потеряно

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 исключения

9
задан d219 17 June 2019 в 18:47
поделиться

1 ответ

Вот объяснение того, что происходит, с обходным решением.

В вашем случае, однако, я думаю, есть лучшее обходное решение, чем то, что описано в статье по ссылке. Вы уже используете модель представления для Network. Это хорошо! Сделайте это и для контакта (и связанных с ним свойств), и ваши проблемы с нетерпеливой загрузкой волшебным образом исчезнут. Проекция always работает.

7
ответ дан 3 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: