Nhibernate - 如何删除孩子?

时间:2010-02-25 16:25:33

标签: nhibernate domain-driven-design

我正在使用NHibernate开发一个类似于以下类的项目:

public class Parent {
    public IList Children {get;set;}
    // ...
}

public class Child {
    // ...
}

我已将Children属性设置为cascade all / delete orphan。由于我正在使用聚合模式,并且只在Parent的上下文中引用了Child类的实例,因此我没有ChildRepository来直接删除子级 - 只有ParentRepository。但是,当我检索Parent对象并调用Parent.Children.Clear()时,数据库中的子项永远不会被删除。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

删除子实体非常简单 - 只需从集合中删除它们,然后保存父实体即可。该集合应与all-delete-orphans映射。

parent.Children.Clear();
session.Save( parent );

// or 
parent.Children.RemoveAt(0);
session.Save( parent );

除非您的FlushMode是Never。

,否则您也可以在没有Save()调用的情况下执行此操作
session.BeginTransaction();
parent.Children.Clear();
session.Transaction.Commit();

使用@Chris的UnitOfWork抽象,这可能看起来像:

using (var uow = new UnitOfWork()) {
    parent.Children.Clear();
}