Karte Tabelle Vererbung als Eins-zu-Eins-Beziehung mit NHibernate
-
22-09-2019 - |
Frage
Ich habe eine Datenbank, die eine Eins-zu-Eins-Beziehung zwischen einer Person und eine Adresse (die Verwendungen Person id) modelliert hat. Allerdings kann ich nicht einen Weg finden, die Karte mit NHibernate zu machen.
Meine Tabellenstruktur ist die folgende:
PersonTable PersonId PersonName PersonAge AddressTable PersonId CountryName StreetName StateName
Und ich möchte so etwas wie dies als letzte Klasse haben:
PersonClass int Id string Name int Age Address HomeAddress AddressClass string Street string Country string State Person Owner
Ich habe versucht, mit hasOne Beziehung, aber ich kann nicht Wiederverwendung PersonId als Adresse Identifier.
Danke!
Edit: Ich habe vergessen zu erwähnen, dass ich bin FluentNHibernate mit so sowohl fließend Mapping und XML in Ordnung sein
.Lösung 2
Ich habe es Id () verwendet wird. GeneratedBy.Foreign () in der Karte Klasse Address es zu der Person ID Referenzierung und es hat funktioniert.
Danke!
Andere Tipps
Das Problem ist, dass Ihr Datenbankschema stellt keine „Hat One“ Beziehung zwischen Person und Adresse. Es stellt eine „hat viele“ Beziehung; Sie können es künstlich pro Person zu sein, eine Adresse einschränkend sein, aber das ändert nichts an der Tatsache, dass das Modell mehrere Adressen pro Person ist.
Um ein „Hat eine“ Beziehung, würden Sie die AddressID setzen auf dem die PersonTable.
Ich würde es als Bestandteil der Person zuzuordnen. In der Person ClassMap folgende hinzufügen:
Component(x => x.Address, m =>
{
m.Map(x => x.Street, "Street");
m.Map(x => x.State, "State");
// more here
});
Prost