Nhibernate-如何删除子项?

Nhibernate-如何删除子项?,nhibernate,domain-driven-design,Nhibernate,Domain Driven Design,我正在与NHibernate合作一个项目,该项目的课程类似于以下内容: public class Parent { public IList Children {get;set;} // ... } public class Child { // ... } 我已将Children属性设置为级联所有/删除孤立项。因为我使用的是聚合模式,并且子类的实例只会在父类的上下文中引用,所以我没有可以直接删除子类的ChildRepository—只有ParentRepositor

我正在与NHibernate合作一个项目,该项目的课程类似于以下内容:

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

public class Child {
    // ...
}

我已将Children属性设置为级联所有/删除孤立项。因为我使用的是聚合模式,并且子类的实例只会在父类的上下文中引用,所以我没有可以直接删除子类的ChildRepository—只有ParentRepository。但是,当我检索父对象并调用Parent.Children.Clear()时,数据库中的子对象永远不会被删除。如何实现这一点?

删除子实体非常简单-只需将它们从集合中删除,然后保存父实体。集合应与所有删除孤立项映射

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

// or 
parent.Children.RemoveAt(0);
session.Save( parent );
您也可以在不调用Save()的情况下执行此操作,除非您的FlushMode从未启用

session.BeginTransaction();
parent.Children.Clear();
session.Transaction.Commit();
使用@Chris的UnitOfWork abstractionm,这可能看起来像:

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

问题是我使用的是存储库模式,而我没有直接访问会话对象的权限。我将所有内容包装在一个IUnitOfWork实例中,该实例抽象会话对象+事务,并在intern提交NHibernate事务的最后对工作单元调用Commit()。我想我只需要向我的存储库基类添加一个Save方法。显然,尽管我到现在还不需要它,但它在我的框架中是一个相当大的漏洞。