Verwendung einer Schnittstelle mit einer Navigationseigenschaft

8

Ich versuche, ein Projekt mit Entity Framework 4, POCO und Nur-Code einzurichten.

Ist es im Entitätsrahmen für den Typ einer Navigationseigenschaft möglich, eine Schnittstelle zu sein?

Ich habe eine Klasse "Aufgabe". Ein Task kann einem Benutzer oder einer Gruppe zugewiesen werden, die jeweils durch eine separate Klasse repräsentiert und in separaten Tabellen gespeichert sind. Die Klassen sehen ungefähr so ​​aus:

%Vor%

Gibt es eine Möglichkeit, die AssignedTo-Eigenschaft als Navigationseigenschaft im Entitätsrahmen zu verwenden? Ich nehme an, dass es eine Art von Diskriminator für EF geben muss, um zu wissen, ob er in der Tabelle Benutzer oder der Tabelle Gruppen suchen muss, aber ich kann das Mapping mit Code-Only oder EDMX herausfinden.

    
TonyB 06.01.2010, 22:34
quelle

3 Antworten

1

Sie können die Schnittstelle in der Navigationseigenschaft verwenden, werfen Sie einen Blick auf diese Lösung, da es dieselbe Frage ist: Verwendung von Schnittstelleneigenschaften mit CodeFirst

    
Ehsan 09.12.2013 10:58
quelle
1

Ich weiß, dass dies eine alte Frage ist, aber nein, es gibt keine Funktion von Entity Framework (selbst die neueste Version 6), mit der Sie eine Navigationseigenschaft mit einem Schnittstellentyp zuordnen können.

Sie können jedoch mehrere Navigationseigenschaften mit konkreten Typen (und einer Einschränkung, für die nur eine festgelegt werden kann) zuordnen und eine nicht zugeordnete Eigenschaft Ihres Schnittstellentyps bereitstellen, die die konkreten Navigationseigenschaften zu einer einzigen Eigenschaft zusammenführt. Leider können dadurch Ihre Abfragen komplexer werden, da bestimmte Abfragen wissen müssen, auf welche konkreten Navigationseigenschaften verwiesen werden soll (und Sie können keine Abfrage für Ihre nicht zugeordnete Schnittstelleneigenschaft verwenden).

Die Unterstützung für polymorphe Navigationseigenschaften ist sehr komplex. Überlegen Sie, was passieren würde, um die ursprüngliche AssignedTo -Eigenschaft abzufragen, wenn Sie annehmen, dass sie einer Spalte wie AssignedToId int zugeordnet ist. Sie müssten entweder die Entity-Sets User und Group verbinden oder ihnen beitreten und hoffen, dass ein gegebenes AssignedToId nur in einem von ihnen erscheint. Dies ist der Ansatz, der von Table-Per-Concrete (TPC) Typ-Mapping, aber es funktioniert nur mit Klassenvererbung (keine Schnittstellen) und sorgfältige Planung für die Generierung unterschiedlicher IDs über die teilnehmende Typen.

    
Michael Petito 04.01.2015 23:23
quelle
0

Sie können sich viel Arbeit ersparen, indem Sie das Text Template Transformation Toolkit (T4) verwenden, das von EF4 unterstützt wird. Ich fand diese nach gut 12 Stunden Suche nach einem Weg um meine POCOs und Schnittstellen manuell zu erstellen,

Ссылка

Neben der Bereitstellung einer hervorragenden Grundlage für Komponententests werden automatisch Navigationseigenschaften basierend auf den in Ihrem Modell definierten Beziehungen generiert.

    
Amit G 05.12.2010 10:39
quelle