Ich werde mich zuerst mit dem EF-Code beschäftigen. Mein Domänenmodellentwurf scheint das automatische "Auffüllen" von untergeordneten Objekten nicht zu unterstützen, wenn ich sie im Code aufruft.
Modell:
%Vor%Zum Beispiel rufe ich einfach an:
%Vor% Und mein Objekt enthält alle Cars
aus der Datenbank, aber nicht die Coordinates
. Der Datenbank-Seed hat die Daten korrekt erstellt, aber ich kann nicht erreichen, dass EF automatisch auf Coordinates
oder Client
verweist. Aber ich vermute, sobald wir eines lösen, wird es das andere auflösen.
Was mache ich falsch, habe ich missverstanden, wie das geht?
Sie haben hier eine Auswahl:
Um verwandte Entitäten zu laden, indem Sie EF an Include () sie. Zum Beispiel können Sie Cars
einschließlich ihrer Coordinates
und Clients
wie folgt laden:
Zum verzögerten Laden verwandter Entitäten durch Deklarieren der Navigationseigenschaften virtual
, wodurch EF angewiesen wird, sie beim ersten Zugriff zu laden. Stellen Sie sicher, dass Sie den Lazy Loading für diesen Kontext nicht deaktiviert haben:
this.Configuration.LazyLoadingEnabled = false;
Ein kurzes Beispiel würde so aussehen:
%Vor%Laden Sie verknüpfte Entitäten explizit in den Kontext. Der Kontext füllt dann die Navigationseigenschaften für Sie. Sieht so aus:
%Vor% Der Grund, warum Sie Coordinates
nicht haben, ist, dass es nicht in der Abfrage enthalten ist. Es gibt mehrere Möglichkeiten, es in das Ergebnis aufzunehmen:
_context.Cars.Include(car => car.Coordinates).ToList();
--- es holt Autos mit Koordinaten in einer Abfrage Coordinates
nicht für alle Autos benötigen, können Sie Folgendes tun: Machen Sie die Eigenschaft Coordinates
virtuell, und wenn Sie Autos erhalten, können Sie Coordinates
nur für eine Teilmenge von ihnen erhalten Wenn Sie benötigen und die separaten Aufrufe an die Datenbank für jede Eigenschaft vorgenommen werden "erhalten" Zugriff. Sie werden auch im Debugger sehen, dass EF dynamische Klassen für Sie erstellt hat, deshalb mussten Sie virtual
Tags und Links c# entity-framework ef-code-first