Database.BeginTransaction 대 ​​Transactions.TransactionScope


87

System.Transactions.TransactionScope과 EF6의 차이점은 무엇입니까 Database.BeginTransaction?

누군가가 작은 예를 들어 주거나 ​​분명한 차이가있을 때 사용할 것을 설명 할 수 있습니까?

추신 : 내 프로젝트에서는 EF6를 사용하고 있습니다. 나는 이미 문서를 읽었지만 그다지 도움이되지 않았습니다. 또한 예제를 찾았지만 오히려 사용 SqlConnection.BeginTransaction하고 있으며 이제 MS는 Database.BeginTransactionEF6 에서이 새로운 것을 도입했습니다 .

답변:


97

Entity Framework 6의 설명서에서 답을 찾았습니다.

EF6의 도입과 함께 Microsoft는 새로운 API 메서드 Database.BeginTransaction()Database.UseTransaction(). System.Transactions.TransactionScope여전히 잘 지원 되지만 대부분의 EF6 사용자에게는 더 이상 필요 하지 않습니다 .

반면 Database.BeginTransaction()데이터베이스 관련 작업 트랜잭션에만 사용되며 System.Transactions.TransactionScope, 그 외에도 '일반 C # 코드'도 트랜잭션이 될 수 있습니다.

따라서 Database.BeginTransaction()EF6의 트랜잭션에서 db 관련 작업 만 수행 하는 곳에서 사용하십시오.System.Transactions.TransactionScope db 작업과 C # 코드를 함께 혼합하는 데 사용합니다.

여전히 TransactionScope접근 방식을 선호하는 사람들에게는 특히 클라우드 시나리오에서 제한 사항을 확인하는 것이 좋습니다 (클라우드 시나리오는 분산 트랜잭션을 지원하지 않음).

자세한 정보는 여기 에서 찾을 수 있습니다 .


11
불행히도 Database.BeginTransaction으로 트랜잭션을 중첩 할 수 없지만 TransactionScope에서는 할 수 있습니다.
Triynko

8
``트랜잭션도되는 일반 C # 코드 ''는 실제로 무엇을 의미합니까?
Gerard

@Gerard는 EF 외부에서 SQL 작업을 수행하는 경우 (예 : ADO.NET 사용) 이러한 작업도 동일한 트랜잭션에서 발생한다는 것을 의미한다고 가정합니다.
Rudey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.