0

我的域对象页面具有属性

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 个父页面。

那么这个映射ok吗,我特别担心级联和逆属性。

谢谢

4

1 回答 1

1

这是您要映射的父子关系。如果您只使用谷歌,那么有几篇关于不同类型的父子和树结构的帖子。

一般来说,它实际上取决于您在持久化实体时想要实现的目标以及您想要在树中的哪个方向(向上向下)保存对象......

反之,您告诉 nhibernate 关系的哪一方是所有者。如果设置inverse=true,则表示这不是所有者。当您将集合结束标记为“反向”时,NHibernate 将首先保留“拥有”集合的实体,然后将保留集合中的实体,避免额外的 UPDATE 语句。

要根据需要正确持久化对象,您必须对级联进行一些操作。您还可以告诉地图何时仅删除或更新实体...

如果您是 nHibernate 的新手,我发现使用 Fluent 进行映射更容易习惯,并且有更多此类东西的流畅映射示例。

于 2013-09-23T09:44:25.047 回答