2012-01-10 85 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