标题几乎解释了一切,我有一个成员对象,它引用了也是成员类型的“ friend ”。
public class Member : Entity
{
public Member()
{
Friends = new List<Member>();
}
public virtual IList<Member> Friends
{
get; set;
}
}
模式生成工具使其成为 1:n 关系,而它应该是 n:n 关系,即在成员表中添加一个名为 member_id 的列,并且不创建连接表。
有什么方法可以在 Fluent NHibernate 中创建一个引用多对多关系的 Self 吗?
我尝试使用我之前得到的覆盖作为答案:
public class MemberOverride : IAutoMappingOverride<Member>
{
public void Override(AutoMapping<Member> mapping)
{
mapping.HasManyToMany(m => m.Friends)
.Table("MemberFriendsLinkTable");
}
}
但我收到错误信息:
“NHibernate.MappingException:集合映射中的重复列:Proj.BO.Member.Friends 列:Member_id”
谢谢
编辑:我找到了答案,它是:
mapping.HasManyToMany(m => m.Friends).ParentKeyColumn("Member_Id").ChildKeyColumn("Friend_Id")
.Table("MemberFriendsLinkTable").Inverse().Cascade.SaveUpdate();
最佳答案
这样我就不必再在“未回答的 NHibernate 问题”列表的顶部看到这个问题...
提问者 Eitan 发现了解决他自己问题的方法。他需要像这样指定 ParentKeyColumn
和 ChildKeyColumn
:
EDIT: I found the answer, it's to put:
mapping.HasManyToMany(m => m.Friends) .ParentKeyColumn("Member_Id") .ChildKeyColumn("Friend_Id") .Table("MemberFriendsLinkTable") .Inverse() .Cascade.SaveUpdate();
FluentNHibernate 默认命名外键列如下:{className}_Id
。由于多对多的两端属于同一类型,因此它希望对两列使用相同的列名 Member_Id
。明确命名列可避免此问题。
关于c# - 在 Fluent NHibernate 自动映射中自引用多对多关系自动映射到 1 :n and not n:n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5295780/