Entity Framework Code First und Sammlungen primitiver Typen

8

Beim Erstellen von POCO-Klassen, die Sammlungen primitiver Typen enthalten und von EF Code First beibehalten werden, ist der beste Rat, den ich bisher gefunden habe, eine neue Klasse mit einer ID plus dem primitiven Typ zu erstellen:

Entity Framework und Modelle mit einfachen Arrays

Wenn ich jetzt mehrere Klassen habe, die Eigenschaften vom Typ ObservableCollection<string> benötigen und sie durch ObservableCollection<EntityString> ersetzen (wobei EntityString ein benutzerdefinierter Typ mit einer Id und einer string -Eigenschaft ist), dann habe ich eine Tabelle EntityString mit mehreren Fremdschlüsselspalten, eine für jede Eigenschaft vom Typ ObservableCollection<EntityString> für alle konkreten Typen mit solchen Eigenschaften.

Dies führt zu einem Aufblähen von Spalten mit weitgehend null Fremdschlüssel in der Tabelle EntityString .

Ein Ansatz wäre, eine Unterklasse von EntityString zu erstellen und die Tabelle nach Typ - Modell für diese Unterklassen. Dies erfordert jedoch schwierige Änderungen am Objektmodell, um Entity Framework einfach anzupassen.

Fragen:

  • Ist der Einkapselungstyp die beste Methode zum Verwalten von Collection<PrimitiveType> ?
  • Wenn ja, was sind die Vor- und Nachteile des Erlaubens mehrerer (vieler) Fremdschlüsselspalten im Vergleich zum Erstellen von benutzerdefinierten Tabellen pro Typ (auf Kosten eines umständlichen Modells)?
Eric J. 30.11.2011, 23:37
quelle

1 Antwort

5

Die Förderung eines einfachen Typs für eine Entität ist eine Option. Wenn Sie diese neue primitive Entität in mehreren Relationen verwenden möchten, ist es besser, die Navigationseigenschaften vollständig von dieser Entität zu entfernen und eine unabhängige Assoziation (keine FK-Eigenschaften) zu verwenden.

%Vor%

und Zuordnung:

%Vor%

In der Datenbank erhalten Sie eine neue NULL-fähige FK pro zugehörigem Principal - es gibt keine Möglichkeit, sie zu vermeiden, außer dass eine spezielle StringEntity -Klasse pro Principal erstellt wird (verwenden Sie keine Vererbung, da dies die Performance beeinflusst).

Es gibt eine Alternative:

%Vor%

In diesem Fall benötigen Sie keinen verbundenen Entitätstyp (und eine zusätzliche Tabelle), aber Ihre Entität ist mit der zusätzlichen Eigenschaft Text , die nur für die Persistenz vorgesehen ist, belastet.

    
Ladislav Mrnka 01.12.2011 08:29
quelle