C# 使用默认必需选项嵌套事务与不执行所有操作之间有什么区别?

C# 使用默认必需选项嵌套事务与不执行所有操作之间有什么区别?,c#,transactionscope,C#,Transactionscope,我见过一些代码示例,其中TransactionScope嵌套在另一个类中 在这里我可以理解suppress的用法,但就我所理解的Required只是与外部事务合并,因此如果任何事务失败,整个事务都会失败,那么这有什么意义呢?我是不是遗漏了什么 编辑: 为了清楚起见,我想强调的是,抑制选项我(认为我:-)理解,这在MSDN文档中有解释。我的问题是关于默认的必需的选项;也许我不完全理解,但如果事务B嵌套在事务A中,那么如果A失败或B失败,那么A和B都将回滚,这与我从未将B放在事务中的情况相同 因此,

我见过一些代码示例,其中TransactionScope嵌套在另一个类中

在这里我可以理解
suppress
的用法,但就我所理解的
Required
只是与外部事务合并,因此如果任何事务失败,整个事务都会失败,那么这有什么意义呢?我是不是遗漏了什么

编辑: 为了清楚起见,我想强调的是,抑制选项我(认为我:-)理解,这在MSDN文档中有解释。我的问题是关于默认的必需的选项;也许我不完全理解,但如果事务B嵌套在事务A中,那么如果A失败B失败,那么AB都将回滚,这与我从未将B放在事务中的情况相同

因此,重新表述的问题是“使用默认必需选项嵌套事务与不执行所有操作之间有什么区别?”

思考一下:

using(TransactionScope scope1 = new TransactionScope())
{
     //i insert some records in tabe A
     try
     {              
          using(TransactionScope scope2 = new
             TransactionScope(TransactionScopeOption.Suppress))
          {                  
               // I insert some records in table B
               scope2.Complete() 
          }
          //I insert some records in table C
   }
     catch
     {}
   //I Update some records in table D
   //I Delete some records of table E
   // Here we have an exception being thrown                       
 scope1.Complete() 
}
运行代码后
表A、C、D、E的所有更改都将回滚
将提交对表B的所有更改


您是否阅读了@DJKRAZE上的MSDN示例和说明?如果我引用的是包含反向链接的MSDN页面,那么很可能是的。B在没有任何事务的情况下运行。没有要提交的事务。关于cd和f的语句是正确的(假定没有
scope1.Complete()
call)。提示您提到了B,但它不在代码中。我的问题是关于默认的必需选项,而不是抑制选项。我将对我的问题进行编辑,使其更加清晰。
using(TransactionScope scope1 = new TransactionScope())
{
     //i insert some records in tabe A
     try
     {              
          using(TransactionScope scope2 = new
             TransactionScope(TransactionScopeOption.Suppress))
          {                  
               // I insert some records in table B
               scope2.Complete() 
          }
          //I insert some records in table C
   }
     catch
     {}
   //I Update some records in table D
   //I Delete some records of table E
   // Here we have an exception being thrown                       
 scope1.Complete() 
}