Question

Je suis assez nouveau pour NHibernate et bien que je trouve des tonnes d’informations sur la cartographie NHibernate sur le Web, je suis trop bête pour trouver cette information.

Le problème est donc que j'ai le modèle suivant:

modèle de données

c'est ce que je voudrais qu'il ressemble. Une personne propre qui a deux propriétés d'adresse.

Dans la base de données, j'aimerais conserver cela dans une table. Ainsi, la ligne Person aura un ShippingStreetname et une colonne Streetname, l’un mappé à ShippingAddress.Streetname et l’autre à Address.StreetName

J'ai trouvé un article sur les interfaces fluentes , mais vous n'avez toujours pas trouvé comment le faire grâce à la configuration XML.

Merci d'avance!

Mise à jour: J'ai trouvé la solution à cela par moi-même. Cela peut être fait via le nœud et fonctionne plutôt simplement.

Pour réaliser le mappage des adresses et ShippingAddress, il me suffisait d'ajouter ce qui suit au

<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>
Était-ce utile?

La solution

Ok. J'ai trouvé la solution moi-même. La clé est la construction dans la configuration XML et cela fonctionne plutôt bien.

Voici comment cela se fait:

<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>

Autres conseils

vous pouvez configurer ceci comme deux relations. par exemple

<many-to-one name="ShippingAddress" class="Yournamespace.Address"/>
<many-to-one name="Address" class="Yournamespace.Address"/>

Vous n'avez même pas besoin d'un identifiant pour une adresse. Il suffit de penser à quel point le maintien d’un identifiant est coûteux. Vous avez des problèmes de concurrence, vous avez besoin d'unicité, etc. C'est l'objectif de ValueObjects (ne confondez pas avec System.ValueObject, voir la définition DDD pour ValueObject). Dans ce cas, Address est un ValueObject et ne nécessite donc pas d'identifiant. Et si vous avez besoin d'une collection d'adresses, vous la mappez comme un " " voir http://www.nhforge.org/doc/nh/ fr / index.html # collections-ofvalues ??.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top