流利的NHibernate和朋友的关系

时间:2010-12-21 07:40:37

标签: c# .net mysql nhibernate fluent-nhibernate

我需要使用Fluent NHibernate建立朋友关系模型。我的公司模型与相关公司有List<Company> Related。公司之间的关系在我的数据库中以related表格建模,如下所示:

customer_id | related_id

这两列都是我customers表中PK的外键。

问题是关系只为每对保存一次(你称它为双向的吗?)。

如果以其他方式更容易解决,我可以更改表格结构。

我需要映射Fluent 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?类似,但它对我没什么帮助。

1 个答案:

答案 0 :(得分:0)

我认为你想要实现的目标已经完成了一半。您已经映射了具有Many2Many关系的2个实体。我不会再触摸地图了。

相反,我会通过该映射查询我想要的内容。这样的事情。

function GetRelated(long id){

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

注意事项,映射实体的名称是相关的,并且您有一个可能听起来令人困惑的相关字段,因此我建议您将其重命名为其他内容(如果可能)。

希望它有所帮助。