合并时出现重复键值错误

Duplicate key value error on Merge

我在下面的代码中遇到了这个错误。我不明白它如何给出重复的键值错误。密钥确实存在于数据库中,但代码指定 Merge。另外,当我第一次创建实体并将其保存到数据库时,一切都很好,错误只发生在之后的保存中。如果我在 Session.Merge 之前添加一行来执行 Session.Refresh (将实体恢复为数据库中的值),则不会发生错误。这违背了进行任何更改的目的,但它表明它不喜欢对 entity 的更改。我试过为 cascade 使用不同的值,但没有任何区别。 table 有两列 ProjectIdFeatureId,都是主键。给出了什么?

合并的第一部分似乎由 SQL 删除组成,删除失败。

Could not execute batch command.[SQL: SQL not available] Cystem.Data.SqlClient.SqlException (0x80131904): Violation of PRIMARY KEY constraint 'PK_tblProjectFeature'. Cannot insert duplicate key in object 'dbo.tblProjectFeature'. The duplicate key value is (179, 5844). Violation of PRIMARY KEY constraint 'PK_tblProjectFeature'. Cannot insert duplicate key in object 'dbo.tblProjectFeature'. The duplicate key value is (179, 5844).

public virtual T Merge (T entity)
{
    using (ITransaction transaction = this.Session.BeginTransaction())
    {
        try
        {
            Session.Merge(entity); 
            transaction.Commit();
        }
        catch (System.Exception ex)
        {
            transaction.Rollback();
            throw ex;
        }
    }
    return entity;
}

hbm.xml

<bag name="Projects" table="tblProjectFeature" inverse="false" lazy="true" cascade="none">
          <key>
            <column name="FeatureId" sql-type="int" not-null="true" />
          </key>
          <many-to-many class="BusinessEntities.Project, Infrastructure.Interface">
            <column name="ProjectId" sql-type="int" not-null="true" />
          </many-to-many>
</bag>

将映射文件更改为 inverse 为真。