在NHibernate中将多个值映射到值对象
-
03-07-2019 - |
题
我对NHibernate相当陌生,虽然我在网上找到了大量有关NHibernate映射的信息,但我太傻了,无法找到这条信息。
问题是,我有以下模型:
这就是我想要的样子。一个干净的人有两个地址属性。
在数据库中,我想将其保存在一个表中。 所以Person行将有一个ShippingStreetname和一个Streetname列,一个映射到ShippingAddress.Streetname,另一个映射到Address.StreetName
我找到了关于流畅接口的文章,但仍然没有想出如何通过XML配置来做到这一点。
提前致谢!
更新:我自己找到了解决方法。这可以通过节点完成,并且工作相当简单。
要实现Address和ShippingAddress的映射,我只需将以下内容添加到
<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>
解决方案
确定。我自己找到了解决方案。 关键是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>
其他提示
您可以将此配置为两个关系。 e.g。
<many-to-one name="ShippingAddress" class="Yournamespace.Address"/>
<many-to-one name="Address" class="Yournamespace.Address"/>
你甚至不需要地址的ID。试想维持一个Id是多么昂贵。您有并发问题,需要唯一性等等。这是ValueObjects的目标(不要与System.ValueObject混淆,请参阅ValueObject的DDD定义)。在这种情况下,Address是一个ValueObject,因此它不需要Id。如果您需要一个地址集合,您可以将其映射为“&”;请参阅 http://www.nhforge.org/doc/nh/ EN / index.html的#集合-ofvalues 的。
不隶属于 StackOverflow