我是NHibernate的新手,不知道如何映射ZeroToOne
关系:
涉及3个表
Discounts
DiscountRequests
Requests
两者的主键在DiscountRequests
中成对存储,并非所有折扣都有请求,并非所有请求都有折扣。
每个主键仅在DiscountRequests
中显示一次,因此Discount
与DiscountRequests
具有一对一的关系,Requests
的关系相同。
任何人都知道如何映射这个,这样一个Discount对象可以保存对它的引用请求,如果它有一个请求对象持有对折扣的引用(如果有)。否则他们将持有一个空对象。
答案 0 :(得分:4)
这是一个有趣的关系案例,因为它不是经典的一对一 - 你没有一方是关系的所有者。这意味着您必须有一个间接的“多对多”表,如您的示例所示。最简单的解决方案是将其映射为NHibernate中的集合,但如果在您的域中您不能拥有多个项目,那就太奇怪了。
但有联接可以提供帮助。 Join mapping允许您以对域对象透明的方式将一个实体拆分为多个数据库表。现在,您可以在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
对象和其他方向。
请记住在RequestId
和DiscountId
上都有唯一约束,这样就不会有多行加入。
我还会检查使用分析器对保存和更新没有不良影响,但我没想到。