2010-12-21 8 views

答えて

20

これらはネストされているため、内部トランザクションはロールバックされます。

これはすべての話ではなく、ネストされたトランザクションの作成方法によって異なりますが、デフォルトではロールバックされます。

This articleは、深さが約TransactionScopeになり、ほとんどの質問に回答する必要があります。


配布されているかどうかは関係ありません。

+0

@Frantisekは分散トランザクションについて言及しました。どのように私は分散トランザクションを使用して知っていますか? – Tebo

+0

私は間違っていたと思う。 TransactionScopeを使用すると、おそらくdtcは必要ありません。このhttp://msdn.microsoft.com/en-us/library/ms172152(v=vs.90).aspxを参照してください: "ネストされたスコープは、ルートスコープのアンビエントトランザクションに参加できますが、ネストされたスコープでCompleteを呼び出しますルートスコープに影響を与えません。ルートスコープから最後の入れ子スコープまでのすべてのスコープがトランザクションをコミットする場合にのみ、トランザクションはコミットされます。 –

+1

あなたはこれについて知っていると確信していますが、実際にネストされたトランザクションはなく、ネストされたTransactionScopesだけであるため、「内部トランザクション」と「ネストされたトランザクション」という用語はIMHOは不適切です。 TransactionScopeOption.Requiredを選択すると1つの大きなトランザクションになり、TransactionScopeOption.RequiresNewには2つの完全に独立したトランザクションがありますが、(閉じた)ネストされたトランザクションの意味でネストされません。 –

68

これは、ネストされたトランザクションスコープを開始するスコープオプションによって異なります。

デフォルトオプションTransactionScopeOption.Requiredを使用すると、ネストされたスコープは外側のスコープと同じトランザクションに参加し、外側のスコープがロールバックするときに内側のスコープもCompleteを呼び出した場合でもロールバックされます。

ただし、TransactionScopeOption.RequiresNewを使用すると、ネストされたスコープは独自のトランザクションを開始し、外側スコープとは別に完了するため、外側スコープがロールバックされてもロールバックされません。

TransactionScopeOption.Suppressを使用すると、ネストされたスコープは外部トランザクションに参加せず、非トランザクションで完了するため、外部トランザクションがロールバックされた場合にロールバックされる作業の一部を形成しません。

+0

完璧な答え:) –

関連する問題