我对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 的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top