2013-02-12 106 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

相關問題