web-dev-qa-db-ja.com

外部トランザクションスコープが完了しない場合、内部トランザクションスコープはロールバックしますか?

2つのトランザクションスコープがあり、1つは別のスコープ内にあります。コミットされた後に内部トランザクションスコープがロールバックされ、外部トランザクションスコープが完了しないかどうかを知りたいです。

49
Tebo

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

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

この記事TransactionScopeについて深く掘り下げており、ほとんどの質問に答えるはずです。


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

27
Oded

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

デフォルトのオプションTransactionScopeOption.Requiredを使用すると、ネストされたスコープは外部スコープと同じトランザクションに参加するため、外部スコープがロールバックすると、Complete

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

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

101
Greg Beech