2010-12-21 69 views
3

我需要用流利的NHibernate建模一個朋友關係。我的公司型號有關聯公司List<Company> Related。企業之間的關係進行建模在我的數據庫中的表,related它看起來像這樣:流利的NHibernate和朋友關係

customer_id | related_id

兩個列是一個外鍵PK我customers表。

問題是關係只爲每一對保存一次(你稱之爲雙向?)。

我能夠改變表結構,如果它更容易以另一種方式解決。

我需要映射功能NHibernate這樣,當我做customer.Related(),它會生成一個查詢,如:

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

我一直在努力,在許多不同的方式映射此,我離嘗試是:

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 2010-12-21 09:21:32

回答

0

我認爲你想達到的目標已經完成了一半。您已經使用Many2Many關係映射了2個實體。我不會再觸摸映射。

相反,我會查詢我想通過該映射。像這樣的東西。

function GetRelated(long id){ 

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

一個reccomendation壽,映射實體的名稱是相關的,你有可能聽起來令人困惑的相關領域,所以我建議你把它重命名成別的東西(如果可能)。

希望它有幫助。