2013-02-20 17 views
5

Ok, so nach this page sollte das Entity Framework laden eifrig mehrere Ebenen durch einen innerhalb des SelectInclude Methode.Entity Framework Eager Loading Multiple Levels Exception

Ich habe den folgenden Code:

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

Doch dies wirft ein InvalidOperationException - „Ungültige Art des Ausdrucks“ auf dem Aufruf der zweiten umfassen. Die Ausnahme kommt von EntityFrameworkHelper.CollectRelationalMemebers.

Ich habe auch versucht, Zeichenfolgen zu Include verwandten Eigenschaften zu verwenden, aber das scheiterte auch (ich würde lieber vermeiden, die Zeichenfolgen wenn überhaupt möglich).

Ich benutze die EF 5.0 DLL für .NET 4.0. Meine EF-Klassen sind altmodisch Datenbank-erste EntityObject s.

Kennt jemand die Ursache und wenn ich irgendetwas über diese Ausnahme tun kann?

EDIT:

Wenn die String-Version verwenden:

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

Es wirft InvalidOperationException - Ungültige Art des Ausdrucks.

+0

Was ist die genaue Fehlermeldung, wenn Sie die String-basierte Version von 'Include' verwenden? – Slauma

+0

Siehe Antwort oben. – MgSam

+0

Ich meinte die Ausnahme für die ** String ** basierte Version von 'Include'. – Slauma

Antwort

0

Die Frage am Ende ist, dass eine dritte Partei Include Extension-Methode in einem DLL ich war verwenden hatte Vorrang bekommen über die Include Entity Framework. Die dritte Partei war die Ausnahmen. Nach dem Entfernen ist das Problem behoben.

Eines der Probleme mit Erweiterungsmethoden ...

Danke für die Hilfe jeder.

19

Sie haben redundante Includes. Sie benötigen nur das letzte Include, das alles in diesem Pfad enthält. Beispiel:

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