2013-11-20 3 views
6

간단한 작업을 수행하는 데 오류가 발생합니다.Entity Framework 6을 사용하는 DBConcurrency 예외

먼저 Entity Framework 6 코드를 사용하고 있습니다.

내 컨텍스트에 새 엔터티를 추가하고 제거한 다음 저장을 수행합니다. 이로 인해 DBConcurrency 예외가 발생합니다 (유일한 사용자).

내가 다음을 수행 이렇게하려면 다음을 수행

zurich.TagProjectGroupItems.Add (tagProjectGroupItem); zurich.TagProjectGroupItems.RemoveRange (items);

INT 카운터 = zurich.SaveChanges() (본래의 첨가 목적은 컬렉션의 일부);

이 다음과 같은 예외를 생성

'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException'형식의 예외가 EntityFramework.dll에서 발생했지만 사용자 코드에서 추가 정보 처리되지

: 스토어 업데이트, 삽입 또는 삭제 문이 예기치 않은 행 수 (0)에 영향을 미쳤습니다. 엔터티가로드 된 이후에 엔터티가 수정되거나 삭제되었을 수 있습니다. ObjectStateManager 항목을 새로 고칩니다.

objectcontext는 0 개의 새 항목, 0 개의 업데이트 항목 및 1 개의 삭제 항목을 가지고 있음을 알려줍니다. 엔티티가 작성되지 않았기 때문에 데이터베이스에서 엔티티를 제거하고 0 개의 결과를 리턴하려고 시도하고 있다고 생각합니다.

나는 눈부신 일을 잘못하고 있니?! 이전에는 코드를 처음 사용하지 않았고 EF4에서는 처음으로 모델을 사용했습니다. 나는 혼란 스럽다.

많은 감사,

+0

컬렉션에서 제거하려는 항목 개체에 * 단지 * 컨텍스트에 추가 한 'tagProjectGroupItem'이 포함되어 있다고 하시겠습니까? –

+0

정확함 Ciaran. UI를 사용하면 엔티티를 추가하고 제거/삭제할 수 있습니다. 내가 제거 할 수 있지만 분명히 같은 결과를 얻을 수 있습니다. –

+0

하지만 나중에 항목을 제거하려는 경우 컨텍스트에 항목을 추가하는 이유는 무엇입니까? 엔티티의 추가 및 제거가 별도의 이벤트/핸들러가 아닌가? –

답변

0

DbUpdateConcurrencyException의 호출 "이 엔티티에 대한 SaveChanges를 데이터베이스 업데이트에 있지만, 사실은 데이터베이스에 행이 영향을받지했다가 발생할 것으로 예상 될 때." Source

EntityFramework는 다중 사용자 시나리오에서 동시성 문제를 방지하기 위해이 검사를 수행한다고 생각합니다.

다른 항목을 추가 한 직후에 zurich.SaveChanges();을 붙일 수 있으며 항목을 성공적으로 제거해야합니다. 그러나 언급 한 바와 같이 이상적인 것은 아닙니다.

아마도 대신 항목의 컬렉션을 확인해야합니다 - 그리고 tagProjectGroupItem이 항목에 포함되어 있다면, zurich.TagProjectGroupItems.Add(tagProjectGroupItem);를 호출하는 대신 데이터베이스 작업을 호출 전에 컬렉션 에서 tagProjectGroupItem를 제거하지 마십시오.

+1

컨텍스트에서 컨텍스트를 제거 할 때 엔티티 상태를 확인하여이를 처리 할 수있었습니다. remove 메소드에서 entitystate.added 인 경우 detach로 설정합니다. 따라서 저장이 시작되면 엔티티는 분리되고 문제가 발생하지 않습니다. 이것은 문제를 해결하는 것 같지만 조금 해킹하는 것 같습니다. –

관련 문제