2013-02-20 14 views
5

OK, więc zgodnie z this page, Entity Framework powinien z niecierpliwością ładować wiele poziomów za pomocą metody Select w metodzie Include.Entity Framework Enager Ładowanie wyjątków wielopoziomowych

Mam następujący kod:

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)); 

Jednak to generuje InvalidOperationException - „Nieprawidłowy rodzaj ekspresji” na wezwanie do drugiego należą. Wyjątek pochodzi z EntityFrameworkHelper.CollectRelationalMemebers.

Próbowałem również używać ciągów do właściwości powiązanych z Include, ale to również się nie udało (wolałbym unikać używania ciągów, jeśli to w ogóle możliwe).

Używam biblioteki DLL EF 5.0 dla .NET 4.0. Moje klasy EF są staromodną bazą danych - najpierw EntityObject s.

Czy ktoś zna przyczynę i czy jest coś, co mogę zrobić w związku z tym wyjątkiem?

EDIT:

Podczas korzystania z wersji wyrażenie:

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

To rzuca InvalidOperationException - Nieprawidłowy typ ekspresji.

+0

Jaki jest dokładny komunikat o wyjątku podczas korzystania z opartej na ciągach wersji "Uwzględnij"? – Slauma

+0

Zobacz odpowiedź powyżej. – MgSam

+0

Miałem na myśli wyjątek dla ** stringowej wersji 'Include'. – Slauma

Odpowiedz

0

Problem skończył się, że 3rd party Include metoda rozszerzenie DLL mieliśmy być używany był coraz pierwszeństwo nad ramową za podmiot Include. Osoba trzecia rzuciła wyjątki. Po usunięciu problem został rozwiązany.

Jednym z problemów z metod rozszerzenie ...

Dzięki za pomoc każdego.

19

Masz nadmiarowe obejmuje. Potrzebujesz tylko ostatniego uwzględnienia, które będzie zawierało wszystko na tej ścieżce. Przykład:

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