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)
所以我不必再在"未答复的NHibernate问题"列表的顶部看到这个问题......
提问人艾坦发现了他自己问题的解决方案.他需要指定ParentKeyColumn和ChildKeyColumn喜欢这样:
编辑:我找到了答案,它是:
Run Code Online (Sandbox Code Playgroud)mapping.HasManyToMany(m => m.Friends) .ParentKeyColumn("Member_Id") .ChildKeyColumn("Friend_Id") .Table("MemberFriendsLinkTable") .Inverse() .Cascade.SaveUpdate();
默认情况下,FluentNHibernate命名外键列,如下所示:{className}_Id.由于多对多的两端都是相同的类型,因此它希望Member_Id对两列使用相同的列名.明确命名列可以避免这个问题.