문제

나는 찾았다 MSDN 기사 변경 사항을 저장할 때 EF가 동시성을 처리하는 방법을 설명합니다.

기본적으로 [...] 객체 서비스는 객체 변경을 데이터베이스로 저장합니다. 동시성을 확인하지 않고. 높은 수준의 동시성을 경험할 수있는 속성의 경우 ConcurrencyMode = "고정 된"속성을 갖는 개념 레이어에 엔티티 속성을 정의하는 것이 좋습니다.

두 가지 질문이 있습니다.

  1. 내 모델에 속성이 없습니다 ConcurrencyMode="fixed",, 내가 OptimisticConcurrencyException 변경 사항을 저장할 때 던져지고, 엔티티가 더 이상 데이터 저장소에 존재하지 않기 때문에, 즉 다른 사용자가 삭제했거나 내가 뭔가 빠진 것입니까?

    나는 EF가 실행하는 것을 상상합니다 UPDATE-내가 볼 수 있듯이 이런 식으로 보이는 진료는 OptimisticConcurrencyException ID = 1을 가진 사람이 존재하지 않으면 던져 질 것입니다.

    UPDATE Person SET FirstName = 'John' AND LastName = 'Smith' WHERE ID = 1
    
  2. 사용할 때 ConcurrencyMode="fixed", EF는 엔티티를 삭제할 때 동시성을 점검합니까? 다시 말해, ef는 a를 실행할 것입니다 DELETE-이렇게 보이는 진료소 (기본 키 이상 WHERE-절):

    DELETE FROM Person WHERE ID = 1 AND LastName = 'Doe'
    
도움이 되었습니까?

해결책

좋은 질문.

(1) 그렇습니다. 불행히도 그것은 단순하지 않습니다. EF (3.5)에는 독립적 인 연관성 모델이 있기 때문에 연관성도 독립적으로 취급되며, 말하지 않았지만 업데이트 및 삭제 중 동시성 검사의 일부가됩니다.

즉, 사람을 업데이트 할 때 종종 다음과 같은 업데이트가 표시됩니다.

UPDATE Person SET Partner = NULL AND FirstName = 'John' AND LastName = 'Smith' 
WHERE ID = 1 AND Partner = 2

IE 파트너는 FK 열입니다.

FK 협회를 사용하는 경우 대부분의 사람들도 기대할 수 있으므로이 모든 것이 4.0으로 변경됩니다.

(2) 삭제하려면 동시 모드 = '고정'속성이 삭제 중에 확인됩니다. 동시성 값을 허용하지 않는 삭제 용 스프로크가있는 경우 예외입니다.

도움이 되었기를 바랍니다

알렉스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top