小编mar*_*arn的帖子

nhibernate不会级联删除子项

方案如下,

我有3个名为Parent的对象(我简化名称),父母的子女和孩子的
父母的孩子是父母的集合,孩子的孩子是孩子的集合.

映射如下(相关部分)

<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>
Run Code Online (Sandbox Code Playgroud)

父母的孩子

<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>
Run Code Online (Sandbox Code Playgroud)

我想要实现的是,当我删除父级时,会有一个级联删除一直到孩子的孩子.但目前发生的是这个.

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

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

现在删除部分

session.Delete(doc);
transaction.Commit();
Run Code Online (Sandbox Code Playgroud)

在使用级联和反向解决了"无法插入空值"错误后,我希望现在可以使用此代码删除所有内容,但只删除父项.

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


迭戈,谢谢你的回答.(和解释)

我去除了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>
Run Code Online (Sandbox Code Playgroud)

父母的孩子

<set name="childset"            
     table="cc-table"     
     cascade="all-delete-orphan" 
     batch-size="5"  
     inverse="true"> …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate cascade nhibernate-mapping cascading-deletes

6
推荐指数
1
解决办法
6158
查看次数