2012-07-23 1 views
0

트랜잭션 내에서 수행 된 데이터베이스 잠금이 해당 트랜잭션이 끝날 때 해제된다는 것은 잘 알려져 있습니다. 그래서,이 코드에서 .. 중첩 된 트랜잭션을 커밋 할 때 페이지 잠금이 해제됩니까?

public static TransactionScope CreateTransactionScope() 
{ 
    return new TransactionScope(TransactionScopeOption.Required, 
    new TransactionOptions() { IsolationLevel = IsolationLevel.ReadCommitted }); 
} 

사실이 하나

... 행/페이지 잠금 ( UPDLOCK)이 발표 될 예정 정확히
using (DataContext dataContext = new DataContext()) 
using (TransactionScope rootScope = CreateTransactionScope()) 
{ 
    using (TransactionScope nested = CreateTransactionScope()) 
    { 
     Ticket ticket = dataContext.ExecuteQuery<Ticket>(
      "SELECT * FROM Tickets WITH (UPDLOCK) WHERE id={0}", ticketId).First(); 
     nested.Complete(); 
    } 

    // Will the lock be still ON here? Because I don't need him to be! 
} 

- 배치 용 중첩 된 거래 후 또는 뿌리 하나?

답변

2

루트 범위가 using 블록을 종료하고 처분 한 후에 만 ​​해제됩니다.

이런 종류의 것을 배우는 가장 좋은 방법은 손을 더럽히는 것입니다.

테이블 A와 테이블 B가있는 간단한 데이터베이스를 만들고 각각에 단일 열이 포함되어 있고 "TimeStamp"라는 이름을 지정하고 타임 스탬프 (또는 모든 종류의 값)를 삽입하는 간단한 콘솔 응용 프로그램을 만들고 트랜잭션 옵션으로 재생할 수 있습니다 그 행동.

관련 문제