假设我有一个Foo类。我在Foo上有一个名为Foo_Foo的 视图 ,它列出了Foos之间的多对多关联。我将这个关联映射为每个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尝试删除与视图的关联?
答案 0 :(得分:2)
该集合属于Foo
。您无法共享该集合,因此无需将其保留在数据库中。 Cascade用于告知NH是否也应删除引用的Foo
。
为什么要将Foo_Foo
记录保留在数据库中?如果这应该是双向的多对多自引用,它就不会像这样工作。
在理解了问题之后编辑。
Cascade在您的情况下不起作用,因为它仅影响引用的Foos。
要避免对集合表进行插入/更新和删除,可以尝试以下操作之一:
mutable="false"
,您已经尝试过了。我真的不明白为什么它不起作用。您可以在Nhibernate用户组中询问。inverse="true"
。 Inverse告诉NH,集合被映射到其他地方,不需要从这里存储。所以它只是省略了插入,但我不知道删除。cascade="false"
将起作用(因为它是引用的实体)。它还可以配置插入,更新和删除sql语句(它们都是空的),但这很可能甚至不是必需的。