我在下面的代碼中收到此錯誤。我不明白它是如何給出重複的鍵值錯誤。密鑰確實存在於數據庫中,但代碼指定了Merge
。另外,當我第一次創建實體並將其保存到數據庫時,一切都很好,之後只會在保存時發生錯誤。如果我在Session.Merge
(將實體恢復爲db中的值)之前添加一行以執行Session.Refresh
,則不會發生錯誤。這無法做出任何更改,但它表明它不喜歡entity
的更改。我試過玩cascade
不同的值,但沒有區別。該表有2列ProjectId
和FeatureId
,都是主鍵。是什麼賦予了?合併時出現重複鍵值錯誤
它出現合併的第一部分由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>
映射是什麼樣的? –
添加了映射和更多信息。 –
'inverse =「true」'是解決方案 –