我需要使用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?类似,但它对我没什么帮助。
答案 0 :(得分:0)
我认为你想要实现的目标已经完成了一半。您已经映射了具有Many2Many关系的2个实体。我不会再触摸地图了。
相反,我会通过该映射查询我想要的内容。这样的事情。
function GetRelated(long id){
return Session.Query<Related>()
.Where(r=>r.Customer.Id == id || r.Related.Id == id)
.ToList();
}
注意事项,映射实体的名称是相关的,并且您有一个可能听起来令人困惑的相关字段,因此我建议您将其重命名为其他内容(如果可能)。
希望它有所帮助。