EF4 / Linq Eager Загрузка с Включить не может заполнить все результаты - PullRequest
1 голос
/ 25 августа 2010

Я пробую EF4 как часть службы .Net 4.0 WCF. Цель службы - вернуть данные документа в виде массива объектов сущностей в любое из наших приложений ASP.Net. Приложения все еще находятся в .Net 2.0. Из-за характера решения я отключил LazyLoading на уровне контекста. Я начал с этого:

var revQuery = from revs in context.tbl_Document_Revision
                       where (revs.ID == myIDVar)
                       select revs;

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

var revQuery = from revs in context.tbl_Document_Revision.Include("tbl_Staff")
                       where (revs.ID == myIDVar)
                       select revs;

Массив имеет правильный размер, но все элементы после первого являются пустыми заполнителями по умолчанию. Это похоже на использование Include, которое вернулось в LazyLoading, и я не могу его поставить в линию. У кого-нибудь еще была эта проблема?

Ответы [ 2 ]

0 голосов
/ 16 августа 2011

Возвращаясь к этой проблеме, чтобы попробовать предложения Джека, я наткнулся на возможный ответ. Когда у меня возникла первоначальная проблема, я все еще находился в разработке и размещал сервис и приложение на своем ПК разработчика. Обойдя его, я развернул тестовую версию службы WCF.

Когда я пошел тестировать изменения, предложенные выше, мое приложение все еще указывало на тестовый экземпляр службы (без изменений с прошлого года), который работал! Таким образом, проблема возникает только тогда, когда у вас есть служба и вызывающее приложение на одном компьютере. Я оставлю, почему умнее людей! : -)

0 голосов
/ 07 августа 2011

Попробуйте загрузить свойство явно, а не использовать метод include.Хотя я не могу сказать, почему метод include не работает.

    var revQuery = from revs in context.tbl_Document_Revision
                   where (revs.ID == myIDVar)
                   select revs;
    foreach(var rev in revQuery)
    {
    context.LoadProperty(rev, "tbl_staff");
    }

Еще одна попытка - использовать лямду вместо синтаксиса запроса и посмотреть, поможет ли это.

    var revQuery = context.tblDocument_Revision.Include("tbl_staff")
    .Where( tbl => tbl.ID == myIDVar)
...