아래 코드에서이 오류가 발생합니다. 그것이 중복 키 값 오류를 줄 수있는 방법을 이해하지 않습니다. 키는 실제로 데이터베이스에 있지만 코드에는 Merge
이 지정됩니다. 또한, 엔터티를 처음 만들고 db에 저장하면 모든 내용이 정상적으로 처리되고 이후에는 저장시에만 오류가 발생합니다. 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"'는 해결책입니다. –