EF-Code zuerst: Include funktioniert nicht bei optionalen Beziehungen

9

Ich habe eine bestimmte Abfrage in meinem Code, die alle zugehörigen Entitäten (beide - & gt; 1 FKs und - & gt; N FKs) geladen werden muss, da der Kontext unmittelbar danach entsorgt wird.

Ich habe eine generische "Query" -Methode erstellt, die params Expression<Func<MyItem, object>>[] includes akzeptiert und sie dann intern kettet. Dieser Teil funktioniert gut.

Die Abfrage sieht so aus:

%Vor%

Das Mapping für die nicht funktionierende Eigenschaft (in der Konfiguration von SubChildNotWorking platziert):

%Vor%

Von allen Includes funktioniert nur das SubChildNotWorking nicht. Beim Überprüfen des zurückgegebenen Objekts mit dem Debugger werden die Proxys für alle Eigenschaften angezeigt. Das Öffnen der Proxies gibt mir die korrekten Daten für alle anderen Relationen und eine "Der Objektkontext wurde bereits als Ausnahme behandelt" für die Eigenschaft SubChildNotWorking .

Der einzige Unterschied, den ich feststellen konnte, ist, dass SubChildNotWorking ein Nullable FK (mit Nullable Spalte in der DB und WithOptional Konfiguration im dbcontext) ist, während alle anderen nicht NULLable FKs mit WithRequired konfiguriert sind.

Die Datenbank ist auch eine Legacy-DB, die nicht mit Code First erstellt wurde und nicht ihren Konventionen folgt. Ich habe gerade die Mappings im DbContext gemacht. Alles andere funktioniert gut.

Ich versuche herauszufinden, ob das eifrige Laden bei Nullable FKs nicht funktioniert, aber ich konnte keine Dokumentation darüber finden.

Ist das ein Fehler oder beabsichtigtes Verhalten? Aber vor allem, wie löse ich das?

Danke.

    
Matteo Mosca 11.04.2012, 07:47
quelle

2 Antworten

0

Haben Sie

definiert? %Vor%

in Ihrer Klasse (Entitäten)? Wenn ja, vergiss nicht, dein SubChild mit

zu kommentieren %Vor%

oder es wird zwar geladen, aber nicht angezeigt, wenn Sie den GET-Aufruf für Entitäten ausführen.

    
LulalaBoss 22.10.2013 17:25
quelle
0

Wenn Sie mit der include-Methode arbeiten, sprechen Sie über das Muster der eifrigen Ladung. Entitäten mit Beziehung werden als Sammlungen geladen. Für jeden Nicht-Nullable-Fremdschlüssel gibt es eine triviale Sammlung, die leer beginnt, für nullbare jedoch nicht. Auf dem Code zuerst könnten Sie die Navigationseigenschaft virtuell machen, aber es ist nicht Ihr Fall. Sie können versuchen, es direkt in Context zu laden, zum Beispiel:

%Vor%

oder die kürzere Version:

%Vor%     
Daniel Cruz 15.11.2017 15:47
quelle