流畅的 NHibernate 和朋友关系
Posted
技术标签:
【中文标题】流畅的 NHibernate 和朋友关系【英文标题】:Fluent NHibernate and friend relationship 【发布时间】:2011-05-28 16:24:12 【问题描述】:我需要用 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?,但对我没有多大帮助。
【问题讨论】:
@Michael,感谢您的回答。我已经有了.Inverse()。还是我误会了你? 【参考方案1】:我认为您想要实现的目标已经完成了一半。您已经使用 Many2Many 关系映射了 2 个实体。我不会再接触映射了。
相反,我会通过该映射查询我想要的内容。像这样的。
function GetRelated(long id)
return Session.Query<Related>()
.Where(r=>r.Customer.Id == id || r.Related.Id == id)
.ToList();
建议,映射实体的名称是相关的,并且您有一个相关字段可能听起来令人困惑,所以我建议您将其重命名为其他名称(如果可能)。
希望对你有帮助。
【讨论】:
以上是关于流畅的 NHibernate 和朋友关系的主要内容,如果未能解决你的问题,请参考以下文章