このように TransactionScope が別の内部にネストされているコードの例を見てきました
using(TransactionScope scope1 = new TransactionScope())
{
try
{
//Start of non-transactional section
using(TransactionScope scope2 = new
TransactionScope(TransactionScopeOption.Suppress))
{
//Do non-transactional work here
}
//Restores ambient transaction here
}
catch
{}
//Rest of scope1
}
私はここでの使用を理解できますが、私が理解しているSupress
限りRequired
、外側のトランザクションとマージするだけなので、何かが失敗した場合、すべてが失敗するので、ポイントは何ですか? ここで何か不足していますか?
編集: 明確にするために、MSDN のドキュメントで説明されている Suppress オプション (と思います:-)) を理解していることを強調したいと思います。私の質問は、デフォルトの必須オプションです。たぶん私は完全には理解していませんが、トランザクション B がトランザクション A 内にネストされている場合、A が失敗するかB が失敗すると、AとBの両方がロールバックされます。これは、最初に B をトランザクションに入れなかった場合と同じです.
したがって、言い換えれば、「Transaction をデフォルトの Required オプションでネストすることと、すべてを実行しないことの違いは何ですか?」'