【发布时间】: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