- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 NHibernate 的新手,不确定如何映射 ZeroToOne
关系:
涉及3张表
Discounts
DiscountRequests
Requests
两者的主键成对存储在 DiscountRequests
中,并非所有折扣都有请求,也并非所有请求都有折扣。
每个主键只在 DiscountRequests
中出现一次,因此 Discount
与 DiscountRequests
具有一对一的关系,对于 也是如此>请求
。
任何人都知道如何映射它,以便折扣对象可以持有对它的请求的引用(如果有的话),而请求对象可以持有对折扣的引用(如果有的话)。否则它们将持有一个空对象。
最佳答案
这是一个有趣的关系案例,因为它不是经典的一对一 - 您没有一方是关系的所有者。这意味着您必须有一个间接的“多对多”表,如您的示例所示。最简单的解决方案是将其映射为 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
设置唯一约束,这样就不会出现超过一行的连接。
我还会使用探查器检查对保存和更新没有不良影响,但我不希望有任何不良影响。
关于c# - 如何在 NHibernate 中映射 ZeroToOne 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837373/
我是 NHibernate 的新手,不确定如何映射 ZeroToOne 关系: 涉及3张表 Discounts DiscountRequests Requests 两者的主键成对存储在 Discoun
我是一名优秀的程序员,十分优秀!