我有一个包含B映射列表的A类
<class name="A" table="CLASS_A">
...
<idbag name="ListOfB"
table="CLASS_A_CLASS_B"
cascade="save-update">
<collection-id column="ID" type="Guid"> <!-- surrogate key -->
<generator class="guid.comb"/>
</collection-id>
<key column="ID_A"/>
<many-to-many column="ID_B" class="B"/>
</idbag>
</class>
在数据库方面,CLASS_A&amp;之间存在多对多连接CLASS_A_CLASS_B表。 CLASS_B表,它有一个ID代理键。多对多关系未映射到B类的对象模型中。
最初,假设我在ListOfB中有对象X1和X2。如果我删除X2并插入X3,我注意到NHibernate会更新指向X2的外键,使其指向X3。
这是一个很好的优化。
然而,出于我的目的,我想让NHibernate进行删除,然后在M2M连接表中进行新插入(删除X2行,为X3插入新行)。我想要,因为这些表被复制到我们的应用程序的另一个实例,我们向用户显示插入/更新/删除的差异。
在这种特殊情况下,用例实际上是“我删除了X2并添加了X3”,所以我希望显示事实(而不是更新)。我知道这种行为不是最理想的,但在这种情况下并不重要。
有什么方法可以让NHibernate这样做吗?
答案 0 :(得分:1)
一种次优的方法是删除X2刷新会话,然后添加X3。我相信nHibernate会将其视为两个单独的行为而不是优化它们。
您还可以尝试在映射文件中指定:<sql-delete></sql-delete>
操作。
答案 1 :(得分:0)
谢谢,我没想到同花顺。它绝对应该工作正常。
昨天晚些时候,我再也无法触发这种行为......