Ich habe eine bestimmte Abfrage in meinem Code, die alle verwandten Entitäten (beide -> 1 FKs und -> N FKs) geladen werden muss, weil der Kontext direkt danach entsorgt wird .EF Code First: Include funktioniert nicht auf optionale Beziehung
Ich habe eine generische "Query" -Methode, die params Expression<Func<MyItem, object>>[] includes
dauert und dann intern kettet sie. Dieser Teil funktioniert gut.
Die Abfrage sieht wie folgt aus:
var item = facade.Query<MyItem>(
c => c.Childs.Select(x => x.Parent),
c => c.Childs.Select(x => x.SubChild1),
c => c.Childs.Select(x => x.SubChildNotWorking),
c => c.Childs.Select(x => x.SubChild2),
c => c.Childs.Select(x => x.SubChild3),
c => c.Childs.Select(x => x.SubChildrens)
).FirstOrDefault(c => c.Name == name);
Die Zuordnung für die nicht arbeiten Eigentum (in der Konfiguration von SubChildNotWorking platziert):
this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
Von allen enthält, wird nur die SubChildNotWorking
doesn‘ t tue tatsächlich. 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 ein "Die Objektkontext wurde bereits Exception angeordnet" für die Eigenschaft SubChildNotWorking
.
Der einzige Unterschied I erkennen konnte ist, dass die SubChildNotWorking
ein NULL festlegbaren FK ist (mit NULL festlegbare Spalte auf der DB und WithOptional Konfiguration im DbContext), während alle anderen nicht NULL festlegbaren FKs sind mit WithRequired konfiguriert.
Die Datenbank ist auch eine Legacy-DB, die nicht mit Code First erstellt wurde und ihren Konventionen nicht folgte. Ich habe gerade die Zuordnungen im DbContext vorgenommen. Alles andere funktioniert gut.
Ich versuche herauszufinden, ob eifrig Laden auf Nullable FKs 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.
Was passiert, wenn Sie nur die 'SubChildNotWorking' ohne die anderen subchildren umfassen geschieht? Funktioniert es dann? – Slauma
Nein. Funktioniert auch nicht. –
Können Sie überprüfen, ob das SQL korrekt aussieht (mit 'var sql = facade.Query (c => c.Childs.Select (x => x.SubChildNotWorking)). ToString();') und die Abfrage manuell in testen SSMS, wenn es die erwarteten Ergebniszeilen zurückgibt. –
Slauma