2013-02-12 160 views
1

我是新来NHibernate和不知道如何映射ZeroToOne关系:如何在NHibernate中映射ZeroToOne关系?

有3代表参与

Discounts 
DiscountRequests 
Requests 

两者的主键被存储为对在DiscountRequests,并非所有的折扣有一个请求并不是所有的请求都有折扣。

每个主键只在DiscountRequests出现一次,因此DiscountDiscountRequests有一对一的关系,Requests的关系也是一样的。

任何人有任何想法如何映射这个所以折扣对象可以容纳对它的引用请求,如果它有一个和Request对象持有的折扣基准(如果有)。否则,他们将持有一个空对象。

回答

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对象和其他方式。

记得在RequestIdDiscountId上都有独特的限制,这样就不会有多于一行的行加入。

我也会检查有没有不良影响保存和更新与探查器,但我不指望任何。

+0

这似乎更多我所需要的,我将在今天的某个时间放弃它,以后会接受答案。 – 2013-02-14 10:17:19

相关问题