SaveChanges () 내부의 사용자 정의 원자 업데이트 명령

c# dapper entity-framework savechanges transactions

문제

여러 가지 이유로 DbContext SaveChanges 를 호출 할 때 여러 가지 사용자 지정 SQL UPDATE 명령을 수행 할 수 있어야합니다. 나는 이것을 원자 적으로 발생 시켜서 일반 SaveChanges 와 SQL이 성공하거나 둘 중 어느 것도 성공하지 못하게하려고한다.

나는 이것을 어떻게 성취해야할지 모르겠다. 지금까지 시도한 것은 이것과 다양한 변형입니다.

EF 거래 â € "요점

여기에 오류가 있습니다 ( ExecuteSqlCommand 호출) :

ExecuteNonQuery는 명령에 할당 된 연결이 보류중인 로컬 트랜잭션에있을 때 명령에 트랜잭션이 있어야합니다.

좋아요. ExecuteSqlCommand 에는 트랜잭션을 허용하는 오버로드가 없습니다. 그래서 Dapper 패키지를 설치하고이 Dapper 호출로 문제가되는 행을 대체하고 트랜잭션을 전달합니다.

this.Database.Connection
  .Execute("insert into Tests (Foo, Bar) values ('test', 2)", 
  transaction: tran);

하지만 지금은 오류 base.SaveChanges() 에 발생하고 내게 다음과 같은 준다 :

SqlConnection은 병렬 트랜잭션을 지원하지 않습니다.

그래서 분명히 SaveChanges 는 이미 datacontext의 연결에서 하나를 만들었지 만 항상 새로운 트랜잭션을 생성합니까?

내가 원하는 것을 성취 할 수있는 방법이 있습니까?

Entity Framework 5.0 코드 우선을 사용하고 있습니다.

수락 된 답변

모든 작업 주위에 TransactionScope 래핑하십시오. 이 클래스는 .NET 트랜잭션에 대한 일반적인 추상화입니다. EF와 SqlConnection 이 자동으로 참여합니다. 우연히 분산 트랜잭션을 트리거하는 것과 같은 몇 가지 함정이 있기 때문에 최선의 방법을 찾아야합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.