Frage

Ich versuche, Klassenvererbung hieararchy mit NHibernate und SQL Server zu implementieren. Ich habe es mit der Tabelle pro Hierarchie Strategie (eine Tabelle und mehr Unterklassen Elemente in der Mapping-Datei) gut funktionieren.

Allerdings ist die Tabelle pro Unterklasse Strategie (N + 1 Tabellen und N Joined-Unterklasse Elemente in einer Zuordnungsdatei) machen in meinem Fall mehr Sinn, weil ich einige Einschränkungen für die Unterklasse Tabellen setzen will. Ich kämpfe mit, welche Art von PK / FK Vereinigung ich auf dem Meistertisch (Personen) und die Unterklasse Tabelle (Kontaktpersonen) setzen sollte. Nach Angaben der NHibernate Dokumentation sollte es ein Primärschlüssel Assoziation zwischen den Tabellen sein. Ich versuchte, die FK-Einschränkung aus der Unterklasse PK auf die Meisterklasse PK zu setzen, aber es funktioniert immer noch nicht. Ich erhalte die folgende Ausnahme:

NHibernate.Exceptions.GenericADOException: konnte nicht einfügen: [Jobflow.Models.Entities.ContactPerson] [SQL: INSERT INTO Kontaktpersonen (E-Mail, Unternehmen, PersonID) VALUES (?,?,?)] ---> System. Data.SqlClient.SqlException: Kann nicht expliziten Wert für Identitätsspalte in der Tabelle ‚Kontaktpersonen‘ einfügen, wenn IDENTITY_INSERT auf OFF gesetzt ist

.

Ich habe versucht die IDENTITY_INSERT auf ON zu setzen, aber das scheint nicht zu helfen ...

War es hilfreich?

Lösung

Sie müssen die Spalte in Personen als int Identität erklären, aber in Kontaktpersonen als nur int - nur eine Tabelle muss den Überblick über die Identität Wert halten. Ihre Fremdschlüssel / Primärschlüssel sind in Ordnung, das ist das einzige Problem, das Sie angehen müssen.

NHibernate wird in Personen einsetzen, die neue Identität Wert mit SCOPE_IDENTITY (), und dann diesen Wert verwenden explizit für den Einsatz in Kontaktpersonen.

Andere Tipps

Ich schaffe das Schema mit NH des Schema. Es schafft einen Fremdschlüssel auf dem Subklassen Primärschlüssel:

alter table ContactPersons 
add constraint FK81E543E94B3FF9C3 
foreign key (Persons_FK) 
references Persons

Persons_FK wird in der Mapping-Datei deklariert

<joined-subclass name="ContactPersons">
  <key column="Persons_FK"/>
  ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top