我正在使用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()时,数据库中的子项永远不会被删除。我怎样才能做到这一点?
答案 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();
}