Nhibernate:使用All-Delete-Orphan删除子集合不起作用

时间:2014-02-25 08:19:43

标签: c# nhibernate

场景:

  1. 从UI获取FactorDocDTO并汇编到Entity
  2. 清除它的子集合FactorDocDetails
  3. 更新FactoryDoc
  4. 但是儿童收藏品不会删除!

    FactorDocDetail Map:

    References(x => x.FactorDoc)
                    .Not.Nullable();
    

    FactorDoc Map:

    HasMany(x => x.FactorDocDetails)
                    .AsBag()
                    .Not.KeyNullable()
                    .Inverse()
                    .Cascade.AllDeleteOrphan();
    

    更新FactorDoc

    //Create a new session
    FactorDoc doc = _assembler.FromModel(command.FactorDoc);
    
    foreach (var item in doc.FactorDocDetails)
    {
         item.FactorDoc = null;
    }
    
    doc.FactorDocDetails.Clear();
    
    _repository.Update(doc);
    
    //Flush and commit
    

    FactorDocDetails在db

    中仍然存在

2 个答案:

答案 0 :(得分:0)

花了三天时间,我尝试了所有可能的事情,最后它起作用了!

 _repository.Get(command.FactorDoc.Id);
 FactorDoc doc = _assembler.FromModel(command.FactorDoc);
 _repository.Merge(doc);

答案 1 :(得分:-1)

确保您正在刷新会话,并且您也不需要将foreach设置为null的foreach循环。我个人而不是刷新会话而不是在事务中执行语句:

using (NHibernate.ISession session = SessionFactory.GetCurrentSession())
{
    using (NHibernate.ITransaction tran = session.BeginTransaction())
    {
        doc.FactorDocDetails.Clear();
        tran.Commit();
    }
}

还很难说出_repository.Update(doc)实际上在做什么。