본문 바로가기
.Net

MVC - EntityFramework 동시성 충돌, 동일한 유형의 다른 엔티티가 이미 동일한 기본 키 값 사용

by 올엠 2024. 2. 20.
반응형

MVC에서 EntityFrameWork 를 사용하다 보면, 데이터를 업데이트할 때 다음과 같은 오류를 확인 할 수 있습니다.

EntityFramework Error

동일한 유형의 다른 엔티티가 이미 동일한 기본 키 값을 가지고 있기 때문에 { ‘Attach’메서드를 사용하거나 엔티티의 상태를 ‘Unchanged’또는 ‘Modified’로 설정하면 { ”xxxx ‘유형의 엔티티를 연결하는 데 실패했습니다. ‘그래프에있는 엔티티 중 하나의 엔티티가 충돌하는 키 값을 가지고있는 경우 이는 일부 엔티티가 새롭고 아직 데이터베이스 생성 키 값을받지 못했기 때문일 수 있습니다이 경우’추가 ‘메소드 또는’추가됨 ‘엔티티 상태를 사용하여 그래프를 작성한 다음 비 신규 엔티티의 상태를 ‘변경되지 않음’또는 ‘수정 됨’으로 설정하십시오.”

 

위 오류는 동시성 오류라고도 하는데 다음 링크를 확인해보면 좋을 것 같습니다.

파트 10: Entity Framework를 이용한 동시성 충돌 제어

http://www.egocube.pe.kr/translation/content/asp-net-mvc-5-ef-6-tutorial-1/201606200001

다만 기술적으로 ID와 같은 고유한 키가 있다면 Detached 후 Modified 하는 방법으로 진행이 가능합니다.

다음과 같이 ID를 통해 해당 키를 찾은 후 Detached를 진행합니다.

그후 Modified를 하고 SaveChanges를 통해 DB에 반영하면 됩니다.

using (var db = new itdbEntities())
{
 var local = db.Set<alerttable>()
 .Local.FirstOrDefault(f => f.id == alertdata.id);
 if (local != null)
 {
 db.Entry(local).State = EntityState.Detached;
 }
 db.Entry(alertdata).State = EntityState.Modified;
 db.SaveChanges();
}

 

반응형