Ich versuche, eine Reihe von Basis / Sub-Klassen mit Entity Framework, Datenbank zuerst zu implementieren. Nach einigen Online-Tutorials habe ich beschlossen, TPT-Vererbung zu versuchen.
In der Datenbank habe ich eine Basisklassentabelle 'Location' und zwei Subklassentabellen: 'StreetAddress' und 'RuralRouteAddress'. Ich habe eine Fremdschlüsseleinschränkung zwischen den Unterklassentabellen und der Basisklassentabelle auf ihren Primärschlüsseln definiert. Der Primärschlüssel des Standorts ist eine Spalte mit automatischer Inkrementierung, und die Primärschlüssel der beiden Unterklassentabelle sind nicht automatisch inkrementiert.
Im Entity Framework habe ich den 'Basistyp' der beiden Unterklassen als 'Standort' definiert. Ich löschte dann die Assoziationen (und ihre entsprechenden Navigationseigenschaften) aus dem Modell. Ich habe auch die ID-Spaltenzuordnungen aus den Unterklassen gelöscht, da die ID jetzt von der Basisklasse 'Location' übernommen wird.
Das scheint funktioniert zu haben. Ich habe nicht versucht, zu aktualisieren / einfügen, aber die Abfrage gibt die Daten mit ordnungsgemäßer Vererbung an Ort und Stelle.
Mein Problem ist, dass, wenn ich 'Modell von Datenbank aktualisieren', die Vererbungsverknüpfungszeilen bleiben, aber die FK-Verknüpfungen zwischen der Basisklasse und den Unterklassen zurückgebracht werden .... Ich muss sie dann löschen und die Zuordnungslinien in meinem Diagramm neu ausrichten (ich bin etwas wählerisch in Bezug auf das Layout des Modelldiagramms).
Das ist nicht so schlimm, aber das Projekt, für das ich die TPT-Vererbung verwenden möchte, hat eine Menge Vererbung. Ich muss jedes Mal, wenn ich das Modell aktualisiere, jede Menge Assoziationen löschen und mein gesamtes Diagramm reorganisieren.
Habe ich etwas falsch gemacht, als ich die Vererbung implementiert habe? Gibt es eine Möglichkeit, bestimmte Zuordnungen beim Aktualisieren des Modells zu ignorieren / auszuschließen?
Die Beziehungen, die Sie in der Datenbank definieren, werden immer wieder angezeigt, wenn Sie das Modell aus der Datenbank aktualisieren. Das ist Absicht. Wenn Sie im Modell Klassen mit einer anderen Beziehungsstruktur erstellen möchten, erstellen Sie ein komplexes Modell aus einer gespeicherten Prozedur, die alle Spalten (oder alle gewünschten Spalten) aus der Basistabelle auswählt. Importieren Sie diese Prozedur und bearbeiten Sie in den Funktionsimporten den Rückgabetyp, indem Sie einen neuen komplexen Typ erstellen, oder benennen Sie einfach das Ergebnis um, das von EF automatisch erstellt wird. Fügen Sie dann Ihre Zuordnungen für diesen Typ hinzu und verwenden Sie sie als Basistyp für Ihre geerbten Klassen. Der gute Teil davon ist, dass Sie die Typstruktur an jede Tabellenänderung anpassen können, indem Sie die gespeicherte Prozedur bearbeiten und dann mit "Get Column Information" und "Update" den komplexen Typ in eine Linie bringen. Es überschreibt Ihre Assoziationen nicht, weil sie nicht in der Datenbank definiert sind, aber es ist fast so einfach wie die Verwendung von TPT.
Joey
Tags und Links entity-framework inheritance sql-server-2014