1

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

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, и я не могу показаться, что он ударил его в линию. У кого-нибудь еще была эта проблема?

+0

Можете ли вы опубликовать фрагмент диаграммы EDMX, который показывает объекты DocRevision и StaffNames. Почему нечетная плюрализация? Правильно ли имя «StaffNames»? Кстати, есть некоторые сильно типизированные версии '.Include 'в Интернете, которые могут вам помочь. Как вы проецируете данные в нужную «форму» для вашего массива? Вы тоже можете показать этот код? –

+0

Они оба вариации на имена реальных объектов, поэтому я просто использовал все, что пришло в голову. Я просто использую revQuery.ToArray (); чтобы вернуть его. В некотором роде я применяю упрощенный подход с этим, так как я прыгаю прямо из работы в .Net 2, и мы небольшая команда без опыта Linq и т. Д. Я рассмотрю EDMX, мне будет необходимо одобрение руководства. Я боюсь. – Adrian

+0

Извините, StackOverflow не позволит мне добавить изображение, поскольку я слишком новичок на сайте. – Adrian

ответ

0

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

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

0

Попробуйте загрузить свойство явно, а не использовать метод 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) 
+0

Джек, спасибо за предложения, к сожалению, они не решили это. Однако они указали на возможную причину, которую я добавил ниже. – Adrian