Entity Framework: Wie kann ich ermöglichen, eine eine Tabelle pro Klassenvererbung mit einem rowversion Feld?

StackOverflow https://stackoverflow.com/questions/635777

Frage

Warum kann ich nicht definiere ein Mitglied mit dem gleichen Namen in Unterklassen? Ich habe eine eine Tabelle pro Klassenvererbung mit einem rowversion timestamp Feld in jeder Tabelle. Es scheint, wie das Entity Designer sollte dies ermöglichen und die new Schlüsselwort auf der Eigenschaft verwenden, um sie geschehen. Was ist die Abhilfe? Wie kann ich das gleiche Feld in einer Vererbungskette mit unterschiedlichen Werten angeben, wenn ich nicht new verwenden kann? Dies kann für andere Datenbanken wahr sein, die rowguids haben, modifiedbys, modifieddates, etc.

Edit:. ich die logische Art und Weise denke, es zu tun wäre, nur den Verweis auf das Feld umbenennen, dh PersonRowversion in der Student Klasse, die von Person decends

Bin ich ein Stück von EF fehlt, die diese Art von Feldern automatisch obwohl verfolgen können?

War es hilfreich?

Lösung

Da eine Klasse kann nicht zwei Mitglieder mit dem gleichen Namen. „Neue“ wird nicht das tun, was Sie wollen. „Neue“ verbirgt sich die geerbten Member; es nicht gibt Ihnen zwei verschiedene Mitglieder mit dem gleichen Namen. Also, wenn der verwendete Code erzeugt „neu“ dann würden Sie nie in der Lage sein, den Wert in der „Elterntabelle“ für den Zugriff von Ihrem C # -Code. Es ist gut für beiden Datenbanktabellen zwei Spalten mit dem gleichen Namen zu haben, aber Sie müssen die doppelten Spaltennamen in Ihrem konzeptionellen Modell umbenennen, wenn zwei Tabellen eine Klasse bilden.

In Bezug auf dem „Änderungsdatum“ usw. Sie in der Regel nur eine benötigen. Wenn Sie einen Supertyp von Tiere und einen Subtyp von Hund haben, hält das Entity Framework ein Update auf den " Tier Teil“oder‚Hund Teil‘des Typs ein Update für die gesamte Instanz zu sein, genau wie C # funktioniert.

Beachten Sie, dass das konzeptuelle Modell und das Speichermodell verschiedene Dinge sind, und nach anderen Regeln spielen. Seien Sie vorsichtig, in streng OO denken oder streng relationale Ausdrücke, wenn in Ihrem Unternehmen Modell arbeiten. Innerhalb des Entity-Modell, überbrücken Sie beide Welten. Wie ich schrieb an anderer Stelle :

Einer der mentalen Barrieren, die Sie haben über zu erhalten, wenn ein gutes objektrelationale Mapping der Gestaltung ist die Tendenz, in erster Linie zu denken, in der objektorientierten Begriffen oder relationale Begriffen, je nachdem, was Ihre Persönlichkeit paßt. Ein gutes Objekt relational mapping, enthält jedoch sowohl ein gutes Objektmodell und ein gutes relationales Modell. Zum Beispiel, sagen wir, Sie eine Datenbank mit einer Tabelle für Menschen haben, und damit verbundene Tabellen für Mitarbeiter und Kunden. Eine einzelne Person kann eine Aufzeichnung in allen drei Tabellen haben. Nun, von einer streng relationalen Sicht, könnten Sie eine Datenbank VIEW für die Mitarbeiter und ein anderes für Kunden konstruieren, von denen beiden Informationen aus der Tabelle Personen aufzunehmen. Wenn eine eine VIEW oder die andere verwenden, können Sie vorübergehend denken Sie an eine einzelne Person als „nur“ ein Angestellter oder „nur“ ein Kunde, obwohl Sie wissen, dass sie beide sind. So jemand aus dieser Weltsicht kommen könnte versucht werden, um ein OO-Mapping zu tun, wo Mitarbeiter und Kunden sind beide (direkt) Subklassen von Person. Aber das funktioniert nicht mit den Daten, die wir haben; da eine einzelne Person hat sowohl Mitarbeiter und Kundendaten (und da keine Person Instanz der konkreten Subtyp Mitarbeiter und Kunden gleichzeitig sein kann), muss die OO Beziehung zwischen Person und Mitarbeitern Zusammensetzung sein, anstatt Vererbung und in ähnlicher Weise für Person und Kunden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top