1

我是 NHibernate 的新手,不知道如何映射ZeroToOne关系:

涉及3张表

Discounts
DiscountRequests
Requests

两者的主键成对存储在 中DiscountRequests,并非所有折扣都有请求,也不是所有请求都有折扣。

每个主键只出现一次,DiscountRequests因此Discount具有一对一的关系,DiscountRequests对于Requests.

任何人都知道如何映射它,这样一个 Discount 对象可以持有对它的请求的引用(如果它有一个),并且一个 Request 对象持有一个对 Discount 的引用(如果它有一个)。否则他们将持有一个空对象。

4

1 回答 1

4

这是一个有趣的关系案例,因为它不是经典的一对一关系——你没有一方是关系的所有者。这意味着您必须有一个间接的“多对多”表,如您的示例所示。最简单的解决方案是将其映射为 NHibernate 中的集合,但如果在您的域中您不能拥有多个项目,那就很奇怪了。

但是有连接可以提供帮助。联接映射允许您以对域对象透明的方式将一个实体拆分为多个数据库表。现在你可以在你的Discount映射中有这样的东西:

<join table="DiscountRequests" optional="true">
    <key column="DiscountId" />
    <many-to-one name="Request" column="RequestId" />
</join>

还有一个类似的Request

<join table="DiscountRequests" optional="true">
    <key column="RequestId" />
    <many-to-one name="Discount" column="DiscountId" />
</join>

实际上,这就像DiscountRequests表格被分成两个并且引用分别Request转到Discount对象和其他方式。

记住对两者都有唯一的约束RequestIdDiscountId这样就不可能有超过一行的连接。

我还会检查使用分析器对保存和更新没有不良影响,但我不希望有任何影响。

于 2013-02-13T20:54:57.037 回答