transactionscope 예제

목록 1은 SqlTransaction 클래스를 사용하는 방법을 보여 주는 레거시 예제를 보여 주며 있습니다. 트랜잭션을 롤백하려면 트랜잭션 범위 내에서 Complete 메서드를 호출해서는 안 됩니다. 예를 들어 범위 내에서 예외를 throw할 수 있습니다. 참여하는 트랜잭션이 롤백됩니다. suppress는 코드 섹션에서 수행하는 작업을 유지하려는 경우 유용하며 작업이 실패할 경우 앰비언트 트랜잭션을 중단하지 않으려는 경우에 유용합니다. 예를 들어 로깅 또는 감사 작업을 수행하려는 경우 또는 주변 트랜잭션이 커밋또는 중단되는지 여부에 관계없이 구독자에게 이벤트를 게시하려는 경우를 예로 들 수 있습니다. 이 값을 사용하면 다음 예제와 같이 트랜잭션 범위 내에 비트랜잭션 코드 섹션을 사용할 수 있습니다. 데이터베이스 연결(SqlConnection)과 직접 연결된 트랜잭션을 연결 트랜잭션이라고 합니다. SqlTransaction(IDbTransaction)은 연결 트랜잭션의 예입니다. .NET 프레임워크 1.0/1.1에서 SqlTransaction을 사용합니다. 이 예제에서는 필수를 사용 하 고 새 범위 (scope1)를 만드는 어떤 주변 트랜잭션 없이 코드 블록을 보여 드립니다. scope1은 새 트랜잭션(트랜잭션 A)을 만들고 트랜잭션 A를 앰비언트 트랜잭션으로 만드는 루트 범위입니다. 그런 다음 Scope1은 서로 다른 트랜잭션ScopeOption 값을 가진 세 개의 개체를 더 만듭니다.

예를 들어 scope2는 필수로 만들어지며 앰비언트 트랜잭션이 있으므로 scope1에서 만든 첫 번째 트랜잭션에 조인합니다. scope3는 새 트랜잭션의 루트 범위이며 scope4에는 앰비언트 트랜잭션이 없습니다. 다음 예제에서 RootMethod 메서드의 경우와 마찬가지로 자체 범위를 사용하는 메서드 내에서 TransactionScope를 사용하는 메서드를 호출하여 트랜잭션 범위를 중첩할 수 있습니다. 트랜잭션 관련 사항을 명시적으로 언급하지 않고 트랜잭션을 지원합니다. 앰비언트 트랜잭션은 데이터베이스에만 연결되지 않고 모든 트랜잭션 인식 공급자를 사용할 수 있습니다. 트랜잭션 범위는 앰비언트 트랜잭션을 구현합니다. 트랜잭션Scope의 사용이 표시되면 메서드로 전송하거나 속성을 설정하는 트랜잭션 관련 내용을 찾을 수 없습니다. 해당 코드가 트랜잭션Scope에 있는 경우 코드 블록이 트랜잭션과 함께 자동으로 연결됩니다. WCF 트랜잭션은 트랜잭션 인식 공급자의 또 다른 예입니다.

누구나 WCF 구현과 같은 트랜잭션 인식 공급자를 작성할 수 있습니다. 트랜잭션 Scope의 오버로드된 생성자 중 일부는 트랜잭션의 시간 초과를 제어하는 데 사용되는 TimeSpan 형식의 값을 수락합니다. 0으로 설정된 시간 정은 무한 시간 시간을 의미합니다.