-1

我对 NHibernate 还很陌生,虽然我在网上找到了大量关于 NHibernate 映射的信息,但我太傻了,找不到这条信息。

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

数据模型

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

在数据库中,我想将其保存在一个表中。所以 Person 行会有一个 ShippingStreetname 和一个 Streetname 列,一个映射到 ShippingAddress.Streetname,另一个映射到 Address.StreetName

我找到了一篇关于 fluent interfaces的文章,但还没有弄清楚如何通过 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>
4

3 回答 3

1

行。我自己找到了解决方案。关键是 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>
于 2008-10-20T14:18:02.270 回答
0

您可以将其配置为两个关系。例如

<many-to-one name="ShippingAddress" class="Yournamespace.Address"/>
<many-to-one name="Address" class="Yournamespace.Address"/>
于 2008-10-20T13:11:03.420 回答
0

您甚至不需要地址的 ID。想想维护一个 ID 是多么昂贵。你有并发问题,你需要唯一性,等等。这是 ValueObjects 的目标(不要与 System.ValueObject 混淆,请参阅 DDD 的 ValueObject 定义)。在这种情况下,Address 是一个 ValueObject,因此它不需要 Id。如果您需要一个地址集合,您可以将其映射为“”,请参见http://www.nhforge.org/doc/nh/en/index.html#collections-ofvalues

于 2011-07-07T20:53:33.427 回答