自我引用Fluent NHibernate中的多对多关系自动化自动化为1:n而不是n:n

Eit*_*tan 10 .net c# nhibernate fluent-nhibernate

标题几乎解释了这一切,我有一个成员对象,引用也是类型成员的'朋友'.

public class Member : Entity
    {
        public Member()
        {            
            Friends = new List<Member>();
        }

        public virtual IList<Member> Friends
        {
            get; set;
        }
     }
Run Code Online (Sandbox Code Playgroud)

模式生成工具使其成为1:n关系,而它应该是:n关系,即将列添加到名为member_id的成员表中,并且不创建连接表.

有没有办法让自我在Fluent NHibernate中引用多对多的关系?

我尝试使用之前得到的覆盖作为答案:

public class MemberOverride : IAutoMappingOverride<Member>
{
    public void Override(AutoMapping<Member> mapping)
    {
        mapping.HasManyToMany(m => m.Friends)
               .Table("MemberFriendsLinkTable");
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误信息:

"NHibernate.MappingException:集合映射中的重复列:Proj.BO.Member.Friends列:Member_id"

谢谢

编辑:我找到了答案,它是:

mapping.HasManyToMany(m => m.Friends).ParentKeyColumn("Member_Id").ChildKeyColumn("Friend_Id")
                   .Table("MemberFriendsLinkTable").Inverse().Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

Dan*_*ing 5

所以我不必再在"未答复的NHibernate问题"列表的顶部看到这个问题......

提问人艾坦发现了他自己问题的解决方案.他需要指定ParentKeyColumnChildKeyColumn喜欢这样:

编辑:我找到了答案,它是:

mapping.HasManyToMany(m => m.Friends)
    .ParentKeyColumn("Member_Id")
    .ChildKeyColumn("Friend_Id")
    .Table("MemberFriendsLinkTable")
    .Inverse()
    .Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

默认情况下,FluentNHibernate命名外键列,如下所示:{className}_Id.由于多对多的两端都是相同的类型,因此它希望Member_Id对两列使用相同的列名.明确命名列可以避免这个问题.