2010-12-21 77 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寿,映射实体的名称是相关的,你有可能听起来令人困惑的相关领域,所以我建议你把它重命名成别的东西(如果可能)。

希望它有帮助。