ASP.NET 웹 API에서 OData를 사용하는 경우 official guidance에서 데이터베이스를 수정하는 샘플에는 모두 경쟁 조건이 포함되어있는 것으로 보입니다. 예를 들어, UpdateEntity
샘플 메서드는 _context.Products.Any
다음에 _context.SaveChanges
을 호출하지만 데이터베이스는 호출간에 변경되었을 수 있습니다.ASP.NET 웹 API의 OData CRUD 작업 (경쟁 조건 없음)
DbUpdateConcurrencyException
의 캐치 블록을 포함하는 Entity Framework 컨트롤러가있는 새로운 웹 API에 대해 Visual Studio에서 생성 된 상용구 코드와 다릅니다. OData 업데이트 메서드의 모범 사례와 비슷한 패턴이 있습니까?
또한 Any
다음에 SaveChanges
을 호출하면 두 번의 데이터베이스 왕복이 필요합니다. 단 하나만 만드는 것이 가장 좋은 방법입니까?
호출 SaveChanges 다음에 오는 경쟁 조건이 제거되지 않으면 데이터 덮어 쓰기 위험이 줄어 듭니다. 당신이 필요로하는 것은 동시성 토큰을 사용하는 것이라고 생각합니다. 엔티티를 저장하려고 시도하지만 데이터베이스의 데이터가 이미 변경되면 EF가 발생합니다. 자세한 내용은 http://msdn.microsoft.com/ko-kr/library/vstudio/bb738618(v=vs.100).aspx에서 msdn 문서를 참조하십시오. DbContext를 사용하는 경우 비슷한 방법으로 작동합니다. – Pawel