我正在寻找一种配置nhibernate的方法,以便自动删除孤立子实体,但如果父项被删除且子项存在,则会执行父项的删除查询,但不会执行子项。基本上我想将我的级联选项设置为“save-update-orphan”但不支持此功能。
<set name="children" inverse="true" cascade="all-delete-orphan" access="field">
<key column="ParentId" />
<one-to-many class="Parent" />
</set>
all-delete-orphan对我不起作用,因为它会在删除父项时自动删除子项。
更新 尝试更清楚......当我从父集合中明确删除子节点时,我希望删除子节点。当我明确删除父项时,我不希望删除子项。
答案 0 :(得分:4)
我不相信你可以通过配置做你想做的事。
我能想到的唯一选择是关闭孤儿删除,并在你想删除它时手动删除它。
NHibernate Cascades: the different between all, all-delete-orphans and save-update
以下是每个级联选项的含义:
- none - 不做任何级联,让用户自己处理它们。
- save-update - 保存/更新对象时,检查协议并保存/更新任何需要它的对象(包括 在多对多场景中保存/更新协议。)
- 删除 - 删除对象时,删除分区中的所有对象。
- delete-orphan - 删除对象时,删除该组中的所有对象。除此之外,当一个对象被删除 从联合而不是与另一个对象相关 (孤儿),也删除它。
- all - 当对象保存/更新/删除时,检查协议并保存/更新/删除找到的所有对象。
- all-delete-orphan - 当对象保存/更新/删除时,检查协议并保存/更新/删除找到的所有对象。在 除此之外,当一个物体被从物品中移除时 没有与另一个对象(孤儿)相关,也删除它。
答案 1 :(得分:0)
好吧,如果是要删除的子对象,则应该删除子对象。也就是说,如果您不希望删除父项,请不要尝试通过父项删除子项。