我的域对象页面有适当的
public class Page
{
public virtual string Title {get; set;}
public virtual Page Parent {get; set;}
public virtual IList<Page> ChildPages {get; set;}
}
我正在考虑像这样将对象映射到数据库
Bag(x => x.ChildPages,
b =>
{
b.Inverse(true);
b.Cascade(Cascade.DeleteOrphans);
},
r => { r.OneToMany(); }
);
ManyToOne(x => x.ParentPage, m =>
{
m.Cascade(Cascade.All);
}
);
为了更清楚,请从这个角度来看 页面是网页上下文中的页面对象。该页面可以有0个或多个子页面,一个页面可以属于0或1个父页面。
这个映射是好的,我特别担心级联和反向属性。
由于
答案 0 :(得分:1)
这是您要映射的父子关系。 如果你只是使用谷歌,有几个关于不同类型的父子和树结构的帖子。
一般来说,它实际上取决于你想要保存你的实体你想要实现什么,以及你希望保存对象的树在哪个方向(向上)......
反向告诉nhibernate关系的哪一方是所有者。如果设置inverse = true,则表示这不是所有者。 当您将集合结束标记为“反向”时,NHibernate将首先保留“拥有”该集合的实体,并在之后保留集合中的实体,从而避免使用额外的UPDATE语句。
要正确地保存您想要的对象,您必须在级联中稍微玩一下。 您还可以告诉地图何时仅删除或更新实体...
如果你是nHibernate的新手,我发现用Fluent做的映射更容易习惯,并且还有更多的例子用于这种东西的流畅映射。