English 中文(简体)
在NHibernate中将多个值映射到值对象
原标题:
  • 时间:2008-10-20 13:00:06
  •  标签:

我对NHibernate还比较陌生,虽然网上有很多关于NHibernate映射的信息,但是我太傻了,找不到这个信息。

所以问题是,我有以下的模型:

将此翻译成中文:数据模型

这就是我想要它看起来的样子。一个干净的人有两个地址属性。

In the database I d like to persist this in one table. So the Person row would have a ShippingStreetname and a Streetname Column, the one mapped to ShippingAddress.Streetname and the other to Address.StreetName

我发现了一篇关于流畅接口的文章,但我还没有弄清如何通过XML配置来实现这一点。

提前致谢!

更新:我自己找到了解决方法。这可以通过节点完成,并且非常简单直接。

为了实现地址和送货地址的映射,我只需要添加以下内容至…

<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>
最佳回答

Ok. I found the solution myself. The key is the construct in the XML configuration and it works rather nicely.

这是它如何完成的:

<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>
问题回答

你可以将此配置为两个关系。例如。

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

你甚至不需要身份证明来获取地址。想想维护身份证明有多昂贵。你会遇到并发问题,需要唯一性等等。这是价值对象的目的(不要与 System.ValueObject 混淆,请参考 DDD 中价值对象的定义)。在此情况下,地址是一个价值对象,因此不需要身份证明。如果你需要一个地址集合,你可以像“”一样映射它,详见http://www.nhforge.org/doc/nh/en/index.html#collections-ofvalues





相关问题
热门标签