NHibernate映射-自引用:父对象和子对象

NHibernate映射-自引用:父对象和子对象,nhibernate,tree,self,bag,Nhibernate,Tree,Self,Bag,我正在尝试这种模式: public class Activity { public virtual int ID { get; set; } public virtual int? ParentID { get; set; } public virtual int? RootID { get; set; } public virtual Activity Parent { get; set; } public virtual Activity Root

我正在尝试这种模式:

public class Activity
{
    public virtual int ID { get; set; }

    public virtual int? ParentID { get; set; }
    public virtual int? RootID { get; set; }

    public virtual Activity Parent { get; set; }
    public virtual Activity Root { get; set; }
    public virtual IList<Activity> Children { get; set; }
}
  • 首先,它似乎在寻找不存在的Children表。应该是活动表
  • 第二:我不知道“英语教学”专栏是怎么回事。。。它不存在于任何地方
  • 有人知道如何制作这个映射吗

    以后编辑: 在回答第二个问题时发现:

    在我稍后的编辑中,我得到了第二个问题的答案

    对于第二个问题,我找到的解决方案是放弃与根实体的关系

    ManyToOne(x => x.Root, map => { map.Column("RootID"); map.Cascade(Cascade.All); });
    
    并将其替换为

    Property(x => x.RootID);
    
    因为我不需要根的整个实体。 此外,我还为这样的孩子更换了包:

    public class ActivityMap : ClassMapping<Activity>
    {
        public ActivityMap()
        {
            Table("activity");
            Lazy(true);
            Id(x => x.ID, map => map.Generator(Generators.Identity));
    
            ManyToOne(x => x.Root, map => { map.Column("RootID"); map.Cascade(Cascade.All); });
    
            Bag(x => x.Children,
               mapping =>
               {
                   mapping.Inverse(false);
                   mapping.Lazy(CollectionLazy.Lazy);
                   mapping.Key(k => k.Column("ParentID"));
                   mapping.Cascade(Cascade.All);
               },
               mapping => mapping.ManyToMany(map=>map.Class(typeof(Activity)))
               );
        }
    }
    
    Bag(x => x.Children,
               mapping =>
               {
                   mapping.Inverse(false);
                   mapping.Lazy(CollectionLazy.Lazy);
                   mapping.Key(k => k.Column("ParentID"));
                   mapping.Cascade(Cascade.All);
               },
               mapping => mapping.OneToMany()
               );
    
    Bag(x => x.Children,
               mapping =>
               {
                   mapping.Inverse(false);
                   mapping.Lazy(CollectionLazy.Lazy);
                   mapping.Key(k => k.Column("ParentID"));
                   mapping.Cascade(Cascade.All);
               },
               mapping => mapping.OneToMany()
               );