Dapper와 더 잘 맞는 거래 : BEGIN TRAN 또는 TransactionScope?

c# dapper transactions tsql

문제

방금 Dapper를 사용하기 시작했으며 거래 패턴 이 더 좋을지 궁금합니다.

SQL을 쓸 때 이미 스크립트에서 트랜잭션을 사용하는 것을 선호합니다.

BEGIN TRAN

-- insert, update etc.

COMMIT

테스트하기가 더 쉽기 때문에 .net 트랜잭션이 사용되는 dapper dot net과 관련한 질문도 있습니다. 그래서 실제로 어느 것을 사용해야하는지 잘 모르겠습니다.

두 방법 중 어느 쪽이 다른 쪽보다 유리한 점이 있습니까?

수락 된 답변

사실, 이것은 Dapper와 아무 관련이 없습니다. 대답을 참조하십시오.

TransactionScope 또는 connection.BeginTransaction 또는 "저장 프로 시저의 트랜잭션"결정은 Dapper의 범위를 벗어납니다. Dapper는 단순히 ADO.NET의 DBConnection 개체에 대한 몇 가지 확장 메서드를 제공하므로 쿼리 출력을 개체에 매핑합니다. 나머지는 당신에게 달렸습니다.

  1. TransactionScope 은 일반적으로 분산 트랜잭션에 사용됩니다. 다른 데이터베이스에 걸친 트랜잭션이 다른 시스템에있을 수 있습니다. 이를 위해서는 운영 체제와 SQL Server에서 일부 구성이 필요하며이 옵션을 선택하지 않으면 작동하지 않습니다. 모든 쿼리가 데이터베이스의 단일 인스턴스에 대해 수행되는 경우에는 권장되지 않습니다.
    as @ ImrePhhvel Comments에 언급되어 있습니다 : 단일 데이터베이스를 사용하면이 코드는 사용자가 제어 할 수없는 트랜잭션에 코드를 포함해야 할 때 유용 할 수 있습니다. 단일 데이터베이스를 사용하면 특별한 구성이 필요하지 않습니다.

  2. connection.BeginTransaction 은 단일 데이터베이스에 대해 트랜잭션 (C #, VB.NET 등)을 구현하는 ADO.NET 구문입니다. 여러 데이터베이스에서 작동하지 않습니다.

  3. "저장 프로 시저의 트랜잭션"은 응용 프로그램 코드에서이를 수행하는 대신 저장 프로 시저의 단일 데이터베이스에 대해 구현됩니다.

중첩 된 트랜잭션 또는 위 유형의 조합은 토론의 또 다른 주제입니다. 이것을 찾으려면 인터넷 검색을 시도하십시오.

개인적으로는 UnitOfWork를 사용하여 더 나은 방식으로 트랜잭션을 처리하는 것이 좋습니다. 위의 링크에서 이미 세부 사항을 언급했습니다. 내부적으로 connection.BeginTransaction 사용 connection.BeginTransaction .



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