假设我有课
Foo
。我在 Foo
上还有一个名为 Foo_Foo
的 视图,其中列出了 Foo
之间的多对多关联。我将此关联映射为每个 Foo
上的简单不可变集,其中 cascade="none"
:
<set name="association" table="Foo_Foo" cascade="none" mutable="false">
<key column="ParentFoo" />
<many-to-many class="Foo, MyAssembly" column="BaseFoo" />
</set>
但是,当我尝试删除
Foo
时,NHibernate 会尝试删除 Foo.association
,但确实失败了。
如何阻止 NHibernate 尝试删除与视图的关联?
该收藏属于
Foo
。您无法共享该集合,因此无需将其保留在数据库中。 Cascade 用于告诉 NH 引用的 Foo
是否也应该被删除。
为什么要将
Foo_Foo
记录保留在数据库中?如果这应该是双向多对多自引用,则它不会像这样工作。
理解问题后进行编辑。
Cascade 在您的情况下不起作用,因为它只影响引用的 Foos。
为了避免集合表的插入/更新和删除,您可以尝试以下方法之一:
mutable="false"
,您已经尝试过。我真的不明白为什么它不起作用。你可以在 Nhibernate 用户组询问。inverse="true"
。 Inverse 告诉 NH 该集合已映射到其他地方,不需要从这里存储。所以它只是省略了插入,但我不知道删除。cascade="false"
将起作用(因为它是引用的实体)。它还可以配置插入、更新和删除 sql 语句(它们是空的),但这很可能甚至没有必要。