2011-12-23 131 views
4

我正在寻找一种配置nhibernate的方法,以便孤儿子实体被自动删除,但如果父母被删除且子女存在,删除查询父母被执行,但不是为了孩子。基本上我想设置我的级联选项是“save-update-orphan”,但不支持。Nhibernate:删除孤儿但在删除父母时不删除子女

<set name="children" inverse="true" cascade="all-delete-orphan" access="field"> 
     <key column="ParentId" /> 
     <one-to-many class="Parent" /> 
    </set> 

全删除孤儿对我来说不起作用,因为它会在删除父项时自动删除子项。

更新 尝试和更清楚......当我明确地从父母的集合中删除孩子,我想要孩子删除。当我明确删除父母时,我不希望孩子被删除。

+1

通过删除父项来创建孤儿孩子。为什么你想孤儿删除,但也希望它在同一时间? – Iain 2011-12-23 06:05:36

+0

@lain当我明确地从父母的集合中删除孩子时,我想要孩子被删除。当我明确删除父母时,我不希望孩子被删除。我知道这很奇怪。如果你喜欢,我可以更新问题以获得更多的上下文。 – 2011-12-23 06:21:03

+0

啊我现在明白了,可能值得为其他人更新问题。 – Iain 2011-12-23 06:24:38

回答

4

我不相信你可以通过配置做你想做的事。

我能想到的唯一选择是关闭孤立删除,并在需要删除时手动删除子项。

NHibernate Cascades: the different between all, all-delete-orphans and save-update

下面是每个级联选项意味着:

  • 没有 - 没有做任何级联,让用户自己处理它们。
  • save-update - 当对象被保存/更新时,检查相关并保存/更新任何需要它的对象(包括 保存/更新多对多场景中的关联)。
  • 删除 - 删除对象时,删除关联中的所有对象。
  • delete-orphan - 删除该对象时,删除该assoication中的所有对象。除此之外,当一个对象被删除 从assoication而不与另一个对象 (孤儿),assoticated,也删除它。
  • 全部 - 当一个对象是保存/更新/删除时,检查assoications并保存/更新/删除找到的所有对象。
  • all-delete-orphan - 当一个对象是保存/更新/删除时,检查相关并保存/更新/删除找到的所有对象。在 之外,当一个对象从assoication中被移除并且 没有与另一个对象(孤立的)关联时,也将其删除。
0

那么,你应该删除childobject,如果那是你想要删除的。也就是说,如果您不想删除父项,请不要试图通过父项删除该子项。