2017-09-28 40 views
0

我在下面的代碼中收到此錯誤。我不明白它是如何給出重複的鍵值錯誤。密鑰確實存在於數據庫中,但代碼指定了Merge。另外,當我第一次創建實體並將其保存到數據庫時,一切都很好,之後只會在保存時發生錯誤。如果我在Session.Merge(將實體恢復爲db中的值)之前添加一行以執行Session.Refresh,則不會發生錯誤。這無法做出任何更改,但它表明它不喜歡entity的更改。我試過玩cascade不同的值,但沒有區別。該表有2列ProjectIdFeatureId,都是主鍵。是什麼賦予了?合併時出現重複鍵值錯誤

它出現合併的第一部分由SQL刪除和刪除失敗。

無法執行批處理命令[SQL:SQL不可用。 Cystem.Data.SqlClient.SqlException(0x80131904):PRIMARY KEY 約束 'PK_tblProjectFeature' 的衝突。無法在 對象'dbo.tblProjectFeature'中插入重複鍵。重複鍵值是(179, 5844)。違反PRIMARY KEY約束'PK_tblProjectFeature'。 無法在對象'dbo.tblProjectFeature'中插入重複鍵。 重複的鍵值是(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> 
+0

映射是什麼樣的? –

+0

添加了映射和更多信息。 –

+1

'inverse =「true」'是解決方案 –

回答

0

更改映射文件inverse爲true。