我见过这样的代码示例,其中 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
,它只是与外部事务合并,所以如果有什么失败,整个事情都会失败,那有什么意义呢?我在这里错过了什么吗?
编辑: 为了清楚起见,我想强调我(认为我 :-))理解的 Suppress 选项,这在 MSDN 文档中进行了解释。我的问题是关于默认的必填选项;也许我不完全理解,但是如果事务 B 嵌套在事务 A 中,那么如果 A 失败或B 失败,那么 A和B 都将回滚,如果我一开始就没有将 B 放入事务中,这也是一样的.
所以改写的问题是'用默认的Required选项嵌套事务有什么区别,而不是全部做?'