Der abstrakte Typ X hat keine zugeordneten Nachkommen und kann daher nicht zugeordnet werden

8

Ich habe das folgende Modell:

%Vor%

Aber Entity Framework gibt mir den Fehler:

  

Der abstrakte Typ AbstractBase hat keine zugeordneten Nachkommen und kann daher nicht zugeordnet werden

Meiner Meinung nach sollte dies nicht passieren, da AbstractBase direkt von AbstractBase erbt und die von Concrete1 / 2 konkret geerbten Klassen von GenericAbstractBase. Was ist hier los?

Ich frage mich auch, ob die Eigenschaft des Typs T in GenericAbstractBase von EF beibehalten wird, nur für den Fall, dass jemand, der vorbeikommt, die Antwort im Hinterkopf hat.

Update 1

Kann jemand bestätigen, dass dies von EF unterstützt wird? Ich habe das gesehen posten und laut Rowans Antwort sollte dies der Fall sein. Danke

Update 2 Gleiches Problem, wenn die generische Basisklasse nicht abstrakt ist.

    
reddy 22.03.2015, 17:48
quelle

2 Antworten

5

Hier ist die Antwort vom EF-Team :

  

EDM, das zugrunde liegende Metamodell, das von der EF6-Laufzeit verwendet wird, um darüber nachzudenken   Die Entitätstypen unterstützen keine Generika. Wir erlauben nicht-generische   Entitätstypen, die von allgemeinen generischen Typen erben, die hinzugefügt werden sollen   Modelle, aber wenn wir die Vererbungshierarchien hinaufgehen, hören wir auf zu schauen   sobald wir einen generischen Vorfahren getroffen haben. Du benutzt das normalerweise   Fähigkeit, die Form Ihrer Entity-Typen unter Verwendung des vollständigen Modells zu modellieren   Ausdruck von Vererbung und Generika auf der CLR - Seite von   auf der EF-Seite führt dies jedoch zu nicht verwandten Entitätstypen   hinzugefügt werden.

     

Auf diese Weise haben Sie Ihren DbContext definiert, aus der Perspektive der   EF6-Laufzeit fügen Sie drei verschiedene und nicht verwandte Entitätstypen hinzu:   AbstractBase, Concrete1 und Concrete2. Alle generischen Typen in der   Mitte der Hierarchie wurden ignoriert und deshalb EF nicht   weiß, dass sie verwandt sind.

     

Mit dieser Einschränkung ist die Ausnahme, die Sie bekommen,   erwartet, da AbstractBase abstrakt ist und keine hat   konkrete Nachkommen wissen zu EF. Wenn Sie ein separates nicht-generisches und hinzufügen   konkreter Typ, der direkt von AbstractBase erbt, z. B .:

%Vor%      

Ihr Modell sollte wieder gültig sein. Sie können jedoch nicht verwenden   MyContext.AbstractBase zum Starten von Abfragen, die Instanzen von   Concrete1 oder Concrete2, da EF die Tatsache nicht kennt, dass sie es sind   verwandt.

     

Übrigens haben wir in EF7 die EDM-Schicht für die Implementierung losgeworden   von EF und wir erwarten, mehr und mehr Szenarien für   tatsächliche generische Entitätstypen.

     

Hoffe, das erklärt, was vor sich geht.

     

Diego

    
reddy 24.05.2015, 08:07
quelle
-1

Ich fand die Lösung, die Gil Fink im CodeProject-Artikel, Spreading Inheritance, zur Verfügung gestellt hat Tree Mapping über Assemblys in Code First .

Die Lösung des Problems besteht darin, allen Entitäten im Kontext eine Zuordnung hinzuzufügen. Um dies zu tun, müssen Sie die OnModelCreating-Methode überschreiben und alle Entitäten zuordnen:

%Vor%     
user1439497 20.09.2017 07:55
quelle

Tags und Links