使用nhibernate映射将集合映射到集合

时间:2013-09-23 08:53:03

标签: c# .net nhibernate orm

我的域对象页面有适当的

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

这个映射是好的,我特别担心级联和反向属性。

由于

1 个答案:

答案 0 :(得分:1)

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

一般来说,它实际上取决于你想要保存你的实体你想要实现什么,以及你希望保存对象的树在哪个方向(向上)......

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

要正确地保存您想要的对象,您必须在级联中稍微玩一下。 您还可以告诉地图何时仅删除或更新实体...

如果你是nHibernate的新手,我发现用Fluent做的映射更容易习惯,并且还有更多的例子用于这种东西的流畅映射。