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; }
}
在我稍后的编辑中,我得到了第二个问题的答案 对于第二个问题,我找到的解决方案是放弃与根实体的关系
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()
);