2013-08-01 3 views
0

아래 코드 샘플을 확인하십시오. A 유형 프로세스와 B 유형 프로세스가 모두 또는 모두 수행되기를 원합니다. 아래 코드가 성공합니까?트랜잭션 범위에 둘 이상의 연결이 있습니까?

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 30, 0))) 
     { 

con.Open(); 
//do A type process 
con.Close(); 

con.Open(); 
//do B type process 
con.Close(); 


    scope.Complete(); 
     } 

PS : (1 개 사기꾼을 사용하는 것이 좋습니다하지 마십시오, 이유는 내가이 링크 (http://geekswithblogs.net/edison/archive/2009/04/05/a-simple-3-tier-layers-application-in-asp.net.aspx)에서 3 계층 아키텍처를 사용하고, AB 형 프로세스가 함수 (genericdata 클래스를 호출하는 것입니다) 그러면 자동으로 연결이 열리고 닫힙니다.) 위 코드는 실제 코드를 해석 한 것입니다.

답변

1

DTC를 사용하면 DB 계층과 데이터베이스 사이의 계층처럼 작동합니다. 즉, db에 대한 모든 변경 사항은 .Complete()를 호출 할 때까지 적용되지 않습니다. 실제로 어떤 연결을 사용하고 얼마나 많은 데이터베이스가 트랜잭션에 관련되는지는 중요하지 않습니다.

.Complete() 및 거래 종료를 반드시 확인하십시오. Scope1.Complete가 호출 될 때마다 심지어 당신이 트랜잭션 범위를

Scope1 Scope2 Scope3 위의

을 중첩 한 수, 데이터는 자식 범위 완료

를 호출해도 데이터베이스로 이동합니다
관련 문제