2012-01-10 17 views
0

私は多少のNhibernate初心者ですが、私は研究していますが、Nhibernateマッピングを使って何をしたいのかを理解することができません。Fluent Nhibernate Mapping Multiple Join

は、私は私のオブジェクト

  • ドメイン
  • 会社
  • ディーラー

ドメインは、多くのドメインに属することができ、多くの企業や会社を持つことができるため、次の表を持っています。会社には多くのディーラーがいますが、ディーラーは1つの会社にしか属しません。私は、Domainsが、会社を介してそれに属するすべてのディーラーのリストを生成するためのマッピングを希望します。

CompanyDomainsという名前の(CompanyIDとDomainIDの列を持つ)Joinテーブルがあり、CompanyとDomainsの間に多対多の関係が維持されています。このテーブルは現在、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

可能な解決策は、HasManyと会社のためにDealersコレクションをマッピングし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

+0

@erickh:あなたの質問を誤解して申し訳ありません、私は自分の答えを更新しました – ChrisWue

+0

更新された回答/説明ありがとうございます。私はあなたがそれをマップすることができなかったならあなたが説明したルートが合理的な方法であろうと思っていた。生のSQLに基づいてマッピングを作成できるかどうか知っていますか? – erickh