2016-11-19 19 views
3

我有我的數據庫2個表:如何使用流暢的nhibernate映射這種1:1關係,而不需要應用程序級額外的執行代碼或1:多映射?

  • 隊表(ID,姓名,WebsiteId(可爲空))
  • 網站目錄(ID,姓名)

一個網站可以與團隊一致,但不一定是。一個團隊可以與一個網站對齊,但不需要。所以兩者之間的關係既不是一方也不是一方。

本來,我可以看到這樣做的唯一方法是這樣做是爲了建立一個一對多的映射:

WebsiteMap類

HasMany(x => x.Teams).AsBag().Inverse().Fetch.Select().BatchSize(50); 

TeamMap類

References(x => x.WebSite).Nullable(); 

但要正確執行1:1映射,我必須在我的網站類中執行此操作我有此代碼:

public virtual Team Team 
    { 
     get 
     { 
      return Teams.FirstOrDefault(); 
     } 
    } 

如何在映射圖層中正確描述這種關係以避免必須進行此轉換?

這裏關鍵的是這些表格之一不是另一個的奴隸。我在互聯網上看到的所有例子都與流利的nhibernate 1:1的mappinges假設第二個表不會存在沒有第一個(像用戶表和UserPreferences表),但這不是我的情況。

在我上面的例子中,既然它既可以爲空也不是主或奴隸?
什麼是正確的方式來映射這個流利的nhibernate?

+0

這不只是一個一對一的映射在兩側的關係,空列? – starlight54

+0

是的,但我不明白這是怎麼回答這個問題 – leora

+0

這裏有一個關於如何使用Fluent做一對一的答案,我假設在兩端添加'Nullable()'會覆蓋你的場景。 http://stackoverflow.com/questions/6085568/how-to-do-a-fluent-nhibernate-one-to-one-mapping#answers – starlight54

回答

1

這不是專門針對NHibernate,而是一個應該可以工作的解決方案,不過你可以創建第三個包含兩者關係的表。

無論是網站目錄隊表然後將不得不與關係表一對無關係。

然後你可以使用這個中間表的關係,如一個mentioned in the comments

所以:Team_WebSite(TeamId,WebSiteId)