Pregunta

Soy bastante nuevo en NHibernate y aunque estoy encontrando toneladas de información sobre el mapeo de NHibernate en la web, soy demasiado tonto para encontrar esta información.

Entonces, el problema es que tengo el siguiente modelo:

Datamodel

así es como me gustaría que se vea. Una persona limpia que tiene dos propiedades de dirección.

En la base de datos me gustaría persistir esto en una tabla. Por lo tanto, la fila Persona tendría un ShippingStreetname y una Streetname Column, la asignada a ShippingAddress.Streetname y la otra a Address.StreetName

Encontré un artículo sobre interfaces fluidas , pero aún no ha descubierto cómo hacerlo a través de la Configuración XML.

¡Gracias de antemano!

Actualización: encontré la solución a esto por mí mismo. Esto se puede hacer a través del nodo y funciona de manera bastante sencilla.

Para lograr el mapeo de Address and ShippingAddress solo tuve que agregar lo siguiente a la

<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>
¿Fue útil?

Solución

Ok. Encontré la solución yo mismo. La clave es la construcción en la configuración XML y funciona bastante bien.

Así es como se hace:

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

Otros consejos

puedes configurar esto como dos relaciones. por ejemplo,

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

Ni siquiera necesita una identificación para una dirección. Solo piense lo caro que es mantener una identificación. Tiene problemas de concurrencia, necesita unicidad, etc. Este es el objetivo de ValueObjects (no se confunda con System.ValueObject, consulte la definición de DDD para ValueObject). En este caso, Address es un ValueObject, por lo que no requiere un Id. Y si necesita una colección de Dirección, la asigna como un " " ver http://www.nhforge.org/doc/nh/ es / index.html # collections-ofvalues ??.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top