Entity Framework - Vererbung mit .Include?

8

Ich denke, dass es hier einen ähnlichen Beitrag darüber gibt, aber nicht genau derselbe ...

Ich habe zwei Entitäten in meinem EF-Modell - nennen wir sie Person und Entwickler, wobei letzterer von dem ersteren erbt.

Ich habe auch eine Verbindung zum Entwickler namens Qualifikationen. Dies ist in der Entität Person nicht sichtbar.

Wenn ich eine Abfrage für den Kontext schreibe, wie schließe ich automatisch (.) die Qualifikationen des Entwicklers ein, z. B.

vom Mitarbeiter im Kontext.Mitarbeiter .Include ("Qualifikationen") Wählen Sie Mitarbeiter

funktioniert nicht ... EF beklagt sich, dass die Beziehung nicht existiert (ich nehme an, weil sie nicht auf Employee existiert - aber es gibt keine Developer-Entität im Kontext, nur Employee).

    
Isaac Abraham 22.09.2009, 17:32
quelle

4 Antworten

10

Ich bin auf dieses Problem gestoßen und habe ein wenig experimentiert. Hier ist, was ich gefunden habe mit LINQ 2 Entity gearbeitet.

Nehmen wir an, wir haben in Ihrem Beispiel Person & lt; - Entwickler ---- Qualifikationen.

Wenn Sie einen Entwickler mit Qualifikationen auswählen möchten, würden Sie dies tun.

%Vor%

Nehmen wir nun an, wir haben eine andere Verknüpfung zwischen Person und Adresse. Wir können auch die Adresse in die select aufnehmen, die auch LINQ 2 Entity verwendet.

%Vor%

Beachten Sie, wie ich die benötigten Dinge eingefügt habe, bevor ich den Typ konvertiert und nach der Konvertierung wieder eingefügt habe. Beide Includes sollten jetzt problemlos zusammenarbeiten. Ich habe diese Methoden getestet und beide funktionieren. Ich hoffe, sie arbeiten für Sie, vorausgesetzt, Sie haben Ihre Vererbung korrekt eingerichtet.

GL.

    
Tri Q Tran 18.01.2010 03:33
quelle
2

Wie wäre es damit:

%Vor%

Um die Dinge sind hier interessant:

  1. wir schließen Mitarbeiter aus, die sind keine Entwickler
  2. wir projizieren dann ihre Qualifikationen, und als Nebeneffekt dieser Projektion, etwas namens fixup mit füllen jeder Entwickler.Qualifikationen auch. I.e. Dies ist ein anderer Weg, um das zu erreichen gleicher Effekt wie Include ().

wenn Sie das später tun:

%Vor%

Sie werden nur Entwickler bekommen, und sie werden ihre Qualifikationen auch geladen haben.

Siehe Tipp 1 für weitere Informationen darüber, warum das funktioniert

Hoffe, das hilft

Alex

    
Alex James 22.09.2009 21:41
quelle
2

Basierend auf der Antwort von Tri Q, aber für diejenigen, die den Ansatz ".Load ()" bevorzugen, können Sie verwenden:

%Vor%

Ich benutze es in meinem DbContext. Ich habe die LoadDb () -Methode erstellt, die alle benötigten Daten lädt. So kann ich es aus vielen Projekten verwenden.

    
Asaf 25.08.2014 07:25
quelle
0

Ich bin mit EF nicht vertraut, aber das sieht für mich wie ein Standard-Vererbungsproblem aus. Wenn Sie auf die eindeutigen Eigenschaften einer untergeordneten Klasse aus einer Sammlung von übergeordneten Objekten zugreifen möchten (wobei die tatsächlichen Objekte Instanzen der untergeordneten Klasse sein können oder nicht), müssen Sie den Objekttyp überprüfen und an das untergeordnete Objekt übergeben Gegebenenfalls können Sie dann auf die einzigartigen Eigenschaften zugreifen.

Was würden Sie erwarten, dass die angegebene Anweisung zurückkommt, wenn einige oder alle Objekte keine Person waren?

    
Lazarus 22.09.2009 17:48
quelle

Tags und Links