2017-09-28 4 views
0

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

변경 true로 inverse에 매핑 파일.

관련 문제