Entity-Framework, Code zuerst. Untergeordnete Objekte, die beim Aufruf nicht gefüllt werden

8

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?

    
Damo 01.06.2014, 12:01
quelle

2 Antworten

22

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:

    %Vor%
  • 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%
andyp 01.06.2014, 13:32
quelle
2

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:

  1. _context.Cars.Include(car => car.Coordinates).ToList(); --- es holt Autos mit Koordinaten in einer Abfrage
  2. Wenn Sie 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
    setzen Siehe auch diese Antwort für weitere Details zu diesem Thema.
yar_shukan 01.06.2014 13:30
quelle