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