2013-02-20 4 views
5

Итак, согласно this page, Entity Framework должна с нетерпением загрузить несколько уровней с помощью Select в рамках метода Include.Entity Framework Eager Загрузка нескольких уровней Исключение

У меня есть следующий код:

var reports = _context.Reports 
    .Include(rt => rt.Fields) 
    .Include(rt => rt.Fields.Select(f => f.FieldType)) 
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier)); 

Но это Выдает InvalidOperationException - «Неверный тип выражения» на вызов ко второму относятся. Исключение составляет EntityFrameworkHelper.CollectRelationalMemebers.

Я также попытался использовать строки в Include связанных свойствах, но это тоже не удалось (я бы предпочел избежать использования строк, если это вообще возможно).

Я использую EF 5.0 DLL для .NET 4.0. Мои классы EF - это старомодная база данных - сначала EntityObject.

Кто-нибудь знает причину и есть ли что-нибудь, что я могу сделать для этого исключения?

EDIT:

При использовании версии строки:

var reports = _context.Reports 
    .Include("Fields") 
    .Include("Fields.FieldType") 
    .Include("Fields.FieldType.FieldIdentifier")); 

Он бросает InvalidOperationException - Недопустимый тип выражения.

+0

Каково точное сообщение об ошибке при использовании строковой версии 'Include'? – Slauma

+0

См. Ответ выше. – MgSam

+0

Я имел в виду исключение для ** string ** на основе версии 'Include'. – Slauma

ответ

0

Проблема закончилась тем, что третья сторона Include метод расширения в DLL мы должны были использовать получал приоритет над Entity Framework в Include. Третий участник выбрасывал исключения. После удаления проблема устранена.

Одна из проблем, связанных с методами расширения ...

Спасибо за помощь всем.

19

У вас есть избыточное количество. Вам нужно только последнее включение, которое будет включать что-либо в этом пути. Пример:

var reports = _context.Reports 
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier)); 
Смежные вопросы