【问题标题】:nhibernate does not cascade delete childrennhibernate 不会级联删除子级
【发布时间】:2010-03-05 15:14:16
【问题描述】:

场景如下,

我有 3 个对象(我简化了名称),名为 父母、父母的孩子和孩子的孩子
parent 的 child 是 parent 中的 set,child 的 child 是 child 中的 set。

映射如下(相关部分)

父母

<set name="parentset"
     table="pc-table"
     lazy="false"
     fetch="subselect"
     cascade="all-delete-orphan"
     inverse="true">
  <key column=FK_ID_PC" on-delete="cascade"/>
  <one-to-many class="parentchild,parentchild-ns"/>
</set>

父母的孩子

<set name="childset"
     table="cc-table"
     lazy="false"
     fetch="subselect"
     cascade="all-delete-orphan"
     inverse="true">
  <key column="FK_ID_CC" on-delete="cascade"/>
  <one-to-many class="childschild,childschild-ns"/>
</set>

我想要实现的是,当我删除父级时,会一直级联删除到子级。但目前发生的事情是这样的。

(这纯粹是为了映射测试目的) 获取父实体(工作正常)

IQuery query = session.CreateQuery("from Parent where ID =" + ID);
IParent doc = query.UniqueResult<Parent>();

现在是删除部分

session.Delete(doc);
transaction.Commit();

在通过级联和反转解决了“无法插入空值”错误后,我希望现在可以使用此代码删除所有内容,但只有父级被删除。

我是否遗漏了我的映射中可能遗漏的某些内容?任何正确方向的提示都非常受欢迎!


迭戈,谢谢你的中肯回答。 (和解释)

我删除了on-delete="cascade",这是因为我喜欢尽可能多地在代码中而不是在数据库中进行控制。

下面发布的代码是(工作)结果。

父母

<set name="parentset"     
     table="pc-table"     
     cascade="all-delete-orphan"     
     inverse="true"
     batch-size="5">     
  <key column=FK_ID_PC"/>     
  <one-to-many class="parentchild,parentchild-ns"/>     
</set>

父母的孩子

<set name="childset"            
     table="cc-table"     
     cascade="all-delete-orphan" 
     batch-size="5"  
     inverse="true">            
  <key column="FK_ID_CC">            
  <one-to-many class="childschild,childschild-ns"/>            
</set>

希望这可以帮助遇到同样问题的人!

【问题讨论】:

    标签: c# nhibernate nhibernate-mapping cascade cascading-deletes


    【解决方案1】:

    通过在键上设置on-delete="cascade",您可以让数据库处理级联。

    您是否使用 NHibernate 生成架构?

    我刚刚复制了您的示例,无论有无该属性,它都可以正常工作。移除它时,NHibernate 会进行级联。

    顺便说一句,默认情况下使用lazy="false" fetch="subselect" 不是您应该做的事情。如果您删除这些属性,离开 on-delete="cascade" 并将 cascade 更改为 save-update,您将只有两个查询来检索和删除父级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多