NHibernate:想要更改<idbag> </idbag>的插入/更新行为

时间:2009-04-21 13:31:58

标签: nhibernate

我有一个包含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这样做吗?

2 个答案:

答案 0 :(得分:1)

一种次优的方法是删除X2刷新会话,然后添加X3。我相信nHibernate会将其视为两个单独的行为而不是优化它们。

您还可以尝试在映射文件中指定:<sql-delete></sql-delete>操作。

答案 1 :(得分:0)

谢谢,我没想到同花顺。它绝对应该工作正常。

昨天晚些时候,我再也无法触发这种行为......