代码之家  ›  专栏  ›  技术社区  ›  Chris

NHibernate-如何删除儿童?

  •  2
  • Chris  · 技术社区  · 15 年前

    我正在与NHibernate合作一个项目,课程类似于:

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

    我已将Children属性设置为Cascade All/Delete Orphan。因为我使用的是聚合模式,子类的实例将只在父类的上下文中被引用,所以我没有子存储库来直接删除子类——只有父存储库。但是,当我检索父对象并调用parent.children.clear()时,数据库中的子对象永远不会被删除。我怎样才能做到这一点?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Lachlan Roche    15 年前

    删除子实体很容易-只需从集合中删除它们,然后保存父实体。应使用所有删除孤立项映射集合。

    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的UnitofWorkAbstractionm,可以看到:

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