Nhibernate:删除孤立子项但删除父项时不删除子项

时间:2011-12-23 05:58:37

标签: c# nhibernate

我正在寻找一种配置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对我不起作用,因为它会在删除父项时自动删除子项。

更新 尝试更清楚......当我从父集合中明确删除子节点时,我希望删除子节点。当我明确删除父项时,我不希望删除子项。

2 个答案:

答案 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)

好吧,如果是要删除的子对象,则应该删除子对象。也就是说,如果您不希望删除父项,请不要尝试通过父项删除子项。

相关问题