gpt4 book ai didi

c# - 如何在 NHibernate 中映射 ZeroToOne 关系?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:26 24 4
gpt4 key购买 nike

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

涉及3张表

Discounts
DiscountRequests
Requests

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

每个主键只在 DiscountRequests 中出现一次,因此 DiscountDiscountRequests 具有一对一的关系,对于 也是如此>请求

任何人都知道如何映射它,以便折扣对象可以持有对它的请求的引用(如果有的话),而请求对象可以持有对折扣的引用(如果有的话)。否则它们将持有一个空对象。

最佳答案

这是一个有趣的关系案例,因为它不是经典的一对一 - 您没有一方是关系的所有者。这意味着您必须有一个间接的“多对多”表,如您的示例所示。最简单的解决方案是将其映射为 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 对象,反之亦然。

请记住对 RequestIdDiscountId 设置唯一约束,这样就不会出现超过一行的连接。

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

关于c# - 如何在 NHibernate 中映射 ZeroToOne 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com