2010-05-24 2 views
4

나는 매 10 초마다 실행되는 Windows 서비스를 가지고 있습니다 ... 실행될 때마다 몇 가지 테스트 데이터를 가져 와서 수정하고 EntityFramework를 사용하여 데이터베이스에 유지합니다. 나는 내가 다음과 같은 낙관적 동시성 예외가 변화 유지하려고 할 때마다 두 번째 실행에 -Entity Framework - 낙관적 인 동시성 문제

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

실제로 DB에 기록하는 것이 아니라 10 초마다 기록을 업데이트하는 서비스가 있다는 것을 알고 있습니다. 동시성 예외를 일으키는 원인은 무엇입니까?

개체 그래프의 어딘가에있는 관련 엔티티가 두 번째 저장 작업 전에 수정되고 있다고 생각합니다. 내가 정말로하고있는 일은 새로운 개체 컨텍스트를 인스턴스화하고 동일한 컨텍스트를 사용하여 검색 한 일부 레코드에서 저장 작업을 호출하는 것입니다. 다음 코드는 --- 일

은 "행의 예기치 않은 수 (0)"을 나타냅니다
var ctx = new blahEntities(); 
var profile = ctx.ProfileSet.Where(pr=>pr.FirstName.Contains("a")).FirstOrDefault(); 
profile.Address = "modified"; 
ctx.SaveChanges(); 
ctx.Refresh(RefreshMode.StoreWins,profile); 
+0

'SubmitChanges()'를 호출한다고 가정합니다. 매번'ObjectContext'의 새로운 복사본을 만들어 볼 수도 있습니다. –

+0

예 "SubmitChanges"와 같은 EF 인 "SaveChanges"를 호출합니다. "ObjectContext의 새로운 사본 만들기는 서비스가 루프에 들어갈 때마다 새로운 objectcontext가 전달되기를 원한다는 의미입니까? 지금 당장은 객체 컨텍스트가 서비스가 시작될 때 한 번 만들어지고 수행을 위해 다시 사용됩니다 DB 작업. 기존 컨텍스트를 새로 고치는 방법이 있습니까? – Cranialsurge

+0

엔티티를 연결/제거한 결과로 발생했기 때문에 엔티티를 어떻게 수정하는지 보여주는 코드를 게시 할 수 있습니까? – Nix

답변

6

당신은 ID 필드를 올바르게 매핑 또는 개체 모델에 정의 된, 또는 당신이없는 것보다 더 분리 된 엔티티를 수정하고 저장하려고 시도하며 키 정보가 없습니다.

SQL Server 프로파일 러 또는 Entity Framework 프로파일 러를 실행하고 백그라운드에서 진행중인 작업을 확인하십시오.

+0

같은 문제가있었습니다. – Nikoli

2

한 번이 동일한 문제가 발생하여 오작동하는 업데이트 트리거까지 추적하는 데 시간을 소비했습니다. 업데이트중인 테이블에 트리거가 있으면 올바르게 작동하는지 확인하십시오. 나는 오라클 환경에서 일하고있다.

관련 문제