2010-12-21 10 views
3

私はFluent NHibernateと友達関係をモデル化する必要があります。私の会社のモデルは、関連会社とList<Company> Relatedを持っています。企業間の関係の表に私のデータベースにモデル化され、related次のようになります。流暢NHibernateと友人の関係

customer_id | related_id

両方のカラムは、私のcustomersテーブル内のPKへの外部キーです。

問題は、リレーションがペアごとに1回しか保存されないということです(双方向と呼んでいますか?)。

別の方法で解決しやすい場合は、テーブル構造を変更することができます。私は、いくつかの異なる方法でこれをマップしようとした

SELECT * FROM companies LEFT JOIN related ON customer_id = id OR related_id = id 

、私はきた最も近い:私はcustomer.Related()を行うとき、それはのようなクエリを生成するように流暢NHibernateはをマッピングする必要があり

試してみました:

HasManyToMany(x => x.Related) 
     .Inverse() 
     .ParentKeyColumn("customer_id") 
     .ChildKeyColumn("related_id") 
     .Table("relations") 
     .Cascade.All(); 

ただし、これは(もちろん)customer_idが一致する場合にのみマッピングされます。

どうすれば解決できますか?

編集: Fluent NHibernate: How to create one-to-many bidirectional mapping?と似ていると思いますが、それほど助けにはなりません。

+0

@Michael、あなたの答えに感謝します。私はすでにInverse()を持っています。または私はあなたを恋に落としていますか? – alexn

答えて

0

達成したいと思っているのは、すでに半分の方法だと思います。既に2つのエンティティをMany2Many関係でマップしました。私はそれ以上マッピングに触れることはありません。

代わりに、私はそのマッピングを通して私が欲しいものを照会します。このようなもの。

function GetRelated(long id){ 

    return Session.Query<Related>() 
       .Where(r=>r.Customer.Id == id || r.Related.Id == id) 
       .ToList(); 
} 

reccomendationカントー、マッピングされたエンティティの名前が関係していると、あなたは混乱に聞こえるかもしれない関連分野を持っているので、私はあなたが何か他のもの(可能な場合)にその名前を変更することをお勧めしたいです。

希望します。