トランザクション内で取得されたデータベース ロックは、トランザクションの終了時に解放されることはよく知られています。したがって、このコードでは..
public static TransactionScope CreateTransactionScope()
{
return new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions() { IsolationLevel = IsolationLevel.ReadCommitted });
}
実はこの中に…
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!
}
ネストされたトランザクションまたはルートトランザクションを破棄した後、行/ページロック(UPDLOCK )が正確に解放されるのはいつですか?