2012-01-10 131 views
0

我有點Nhibernate新手,我一直在研究,但我無法弄清楚如何使用Nhibernate映射完成我想要的。流利Nhibernate映射多重連接

我有以下表格爲我的對象

  • 公司
  • 經銷商

域可以有許多公司和企業可以屬於多個領域。公司有許多經銷商,但經銷商只屬於一家公司。我希望我的域名製圖人員能夠通過公司生成屬於它的所有經銷商的列表。

我有一個名爲CompanyDomains(具有列CompanyID和DomainID),維護公司和域之間的多對多關係的連接表。此表格目前未映射到我的Nhibernate設置中......我只是在我的域映射中加入了一個HasManyToMany。 Dealers表中有一個包含CompanyID的列。

我想要的結果很容易與SQL查詢獲得:

SELECT * FROM Dealers 
JOIN Companies on Companies.ID = Dealers.CompanyID 
JOIN CompanyDomains on Companies.ID = CompanyDomains.CompanyID 
WHERE DomainID = 1 

這給我分配到域中的所有經銷商。

我的問題是,我想要一個經銷商在我的域名映射列表。我如何將其與Nhibernate映射?

如果我在其他地方忽略了這個解決方案,請指出我正確的方向,否則我感謝您可以提供任何幫助。

謝謝! 埃裏克

回答

0

一個可能的解決辦法是映射Dealers集合了公司HasMany和便利屬性添加到Domain

public class Domain 
{ 
    ... 
    public virtual IList<Company> Companies { get; private set; } 
    public IList<Dealer> Dealers 
    { 
     get { return Companies.SelectMany(x => x.Dealers).Distinct(); } 
    } 
} 

public class Company 
{ 
    ... 
    public virtual IList<Domain> Domains { get; private set; } 
    public virtual IList<Dealer> Dealers { get; private set; } 
} 

public class Dealer 
{ 
    ... 
    public virtual Company Company { get; private set; } 
} 

至於有間DealerDomain我不沒有直接關係認爲你可以直接映射它。

+0

我不清楚這是如何回答我的問題。你能根據我的情況來解釋嗎? – erickh 2012-01-10 19:00:17

+0

@erickh:對不起,我誤解了你的問題,我更新了我的回答 – ChrisWue 2012-01-10 19:18:47

+0

謝謝你提供最新的答案/解釋。如果不能映射它,我認爲你描述的路線是一個合理的方法。你知道是否可以創建基於原始SQL的映射? – erickh 2012-01-10 19:27:21