Загрузка дочернего объекта (свойство навигации) Объект не работает - PullRequest
0 голосов
/ 13 августа 2010

Мне очень тяжело с этим. У меня есть свойство Navigation под названием Attachment, которое является частью сущности с именем ContentChannel. ContentChannel - это отношение один к одному с KioskType.

В моем классе расширения доменной службы у меня есть следующий запрос:

public IQueryable<ContentChannel> GetContentChannelFromKioskType( long kioskTypeID )
{
    var returnSet = (from cc in ObjectContext.ContentChannels.Include( "Attachment" )
                   join pcc in ObjectContext.PublishedContentChannels on cc.ContentChannelID equals pcc.ContentChannelID
                        where pcc.KioskTypeID == kioskTypeID
                        select cc);
    return returnSet;
}

И это прекрасно работает для возврата списка ContentChannels. Но вложение в каждом ContentChannel равно нулю.

Я пытался [Include] в свойстве attachment в моем классе метаданных ContentChannel в сочетании с ContentChannels.Include("Attachment") в приведенном выше запросе - не повезло, Attachment всегда имеет значение null.

Я выкопал больше, а затем нашел что-то, чтобы явно загрузить мой дочерний элемент:

ObjectContext.LoadProperty( returnSet, "Attachment" );

Но это приводит к следующей ошибке:

Невозможно явно загрузить свойство для отсоединенных объектов. Объекты, загруженные с использованием опции слияния NoTracking, всегда отсоединяются.

Это из-за того, что я делаю соединение, что все шатко, а Включить не работает? Что мне нужно сделать? Эти вложения должны быть загружены, когда я получу ContentChannel!

Есть мысли?

1 Ответ

1 голос
/ 13 августа 2010

Включив join в ваш запрос, вы изменили форму запроса после Include.Так что Include is discarded. Но вам не нужны join:

public IQueryable<ContentChannel> GetContentChannelFromKioskType( long kioskTypeID )
{
    var returnSet = (from cc in ObjectContext.ContentChannels.Include( "Attachment" )
                     where cc.PublishedContentChannels.Any(pcc => pcc.KioskTypeID == kioskTypeID)
                     select cc);
    return returnSet;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...