NHibernate,简单的问题,额外的关联

本文关键字:关联 问题 NHibernate 简单 | 更新日期: 2023-09-27 17:53:14

我有一个问题一直困扰着我,而我博大精深的智慧就是无法理解它。案例:我想使用fluent nhibernate自动执行器和导出模式对同一个实体建立多个一对多关系。

:

基类:

 public abstract class Post<T> : Entity, IVotable, IHierarchy<T>
 {
    public virtual string Name
    {
        get; set;
    }
    public virtual string BodyText
    {
        get; set;
    }
    public virtual Member Author
    {
        get; set;
    }
}

和继承类:

 [Serializable]
public class WallPost : Post<WallPost>
{
    public virtual Member Receiver
    {
        get; set;
    }
}

WallPost的'Member'属性是该类的外键关系:

public class Member : Entity
    {
        public Member()
        {
           WallPosts = new IList<WallPost>();
        }
 public virtual IList<WallPost> WallPosts
        {
            get; set;
        }
}
我希望你能陪我到现在。当我运行nhibernate的exportschema时,我希望得到一个带有'author_id'和'receiver_id'的表wallpost,但是我得到author_id, receiver_id,member_id。为什么Nhibernate框架添加member_id,如果它是用于收集帖子(IList),那么你如何指定它应该使用的外键关系来填充接收者,即成员。WallPosts将返回接收方的所有墙贴。

我希望我的回答是有意义的,如果你需要其他的回答,请告诉我,我会尽量提供的。

Thanks in advance

注。如果我将属性名称从'Receiver'更改为'Member',即公共虚拟Member Member,则只有两个关联而不是3个,author_id和member_id。

E

对于这个问题的解决方案是添加一个覆盖:

mapping.HasMany(x => x.WallPosts).KeyColumn("Receiver_id");

NHibernate,简单的问题,额外的关联

最有可能的(我不使用自动映射,我更喜欢写我自己的classmaps),这是因为自动映射假设你的成员的"WallPosts"是由墙的帖子控制。因此,它为该关系创建了一个member_id。

编辑:尝试在您的fluent配置中添加覆盖,在AutoMap添加:

.Override<Member>(map =>
{
  map.HasMany(x => x.WallPosts, "receiver_id")
    .Inverse;
});