Mapping mehrere Werte zu einem Wert-Objekt in NHibernate
-
03-07-2019 - |
Frage
ich bin ziemlich neu in NHibernate und zwar bin ich zu finden Tonnen von infos auf NHibernate-mapping auf dem Netz, ich bin zu dumm Sie zu finden dieses Stück von Informationen.
Also das problem ist, ich habe das folgende Modell:
dies ist, wie ich mag es, zu schauen.Ein sauberer Mensch, die hat zwei Adresse-Eigenschaften.
In der Datenbank möchte ich beibehalten dieses in einer Tabelle an.Also die Person, die Zeile wäre eine ShippingStreetname und eine Streetname Spalte, die eine zugeordnete zu ShippingAddress.Streetname und anderen Adresse.StreetName
Ich fand eine Artikel über fließend Schnittstellen, aber immer noch nicht herausgefunden, wie man dies durch die XML-Konfiguration.
Vielen Dank im Voraus!
Update:Ich fand die Lösung für das von mir selbst.Dies kann durch den Knoten und wirkt eher einfach.
Zur Erreichung der Zuordnung Adresse und ShippingAddress ich nur hatte, um die folgenden
<component name="Address" class="Address">
<property name="Streetname"></property>
<property name="Zip"></property>
<property name="City"></property>
<property name="Country"></property>
</component>
<component name="ShippingAddress" class="Address">
<property name="Streetname" column="ShippingStreetname" />
<property name="Zip" column="ShippingZip" />
<property name="City" column="ShippingCity" />
<property name="Country" column="ShippingCountry" />
</component>
Lösung
Ok. Ich fand die Lösung selbst. Der Schlüssel ist das Konstrukt in der XML-Konfiguration und es funktioniert ziemlich gut.
Hier ist, wie es gemacht wird:
<component name="Address" class="Address">
<property name="Streetname"></property>
<property name="Zip"></property>
<property name="City"></property>
<property name="Country"></property>
</component>
<component name="ShippingAddress" class="Address">
<property name="Streetname" column="ShippingStreetname" />
<property name="Zip" column="ShippingZip" />
<property name="City" column="ShippingCity" />
<property name="Country" column="ShippingCountry" />
</component>
Andere Tipps
Sie könnten dies als zwei Beziehungen konfigurieren. z.
<many-to-one name="ShippingAddress" class="Yournamespace.Address"/>
<many-to-one name="Address" class="Yournamespace.Address"/>
Sie nicht sogar brauchen, eine Id für eine Adresse.Denken Sie nur, wie teuer ist die Aufrechterhaltung einer Id.Sie haben concurrency-Probleme, Sie müssen Einzigartigkeit, und so auf.Dies ist das Ziel des ValueObjects (tun nicht verwirren mit System.ValueObject sehen DDD definition für ValueObject).In diesem Fall-Adresse ist ein ValueObject so ist es nicht erforderlich, eine Id.Und wenn Sie eine Sammlung der Adresse, die Sie anzeigen es wie ein "" zu sehen http://www.nhforge.org/doc/nh/en/index.html#collections-ofvalues.