实体框架:使用事务范围如何检查DbContext是否有事务?

Sha*_*adi 4 c# entity-framework transactions transactionscope

正如这里 使用实体框架 6 所提到的,如果我们使用以下语句开始事务, Database.BeginTransaction() 我们可以检查上下文是否有事务:

var transaction = db.Database.CurrentTransaction;
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我们使用TrasctionScope 开始事务,这种方法不起作用:

var transactionScope = new TransactionScope();
Run Code Online (Sandbox Code Playgroud)

我只是想知道当我使用TrasctionScope时是否有任何方法可以检查上下文是否有事务?

Sha*_*adi 6

使用实体框架 6,您可以通过两种方式使用事务:

  • 第一种方式,使用Database.BeginTransaction()方法:

       using (var context = new Context())
         {
             using (var dbContextTransaction = context.Database.BeginTransaction())
             {
                 try
                 {
                     //Some EF Statments
    
                     Context.SaveChanges();
                     dbContextTransaction.Commit();
    
                 }
                 catch (Exception)
                 {
                     dbContextTransaction.Rollback();
                 }
             }
    
    Run Code Online (Sandbox Code Playgroud)
  • 第二种方式,使用TransactionScope

         using (var scope = new TransactionScope())
         {
             //Some EF Statments
             Context.SaveChanges();
             scope.Complete();
         }
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您使用第一种方式,您可以使用语句获取事务实例:

    `var transaction = context.Database.CurrentTransaction;`
    
    Run Code Online (Sandbox Code Playgroud)
  • 另一方面,如果您使用 TrasctionScope 开始事务,则必须使用:

    var transaction = System.Transactions.Transaction.Current; 获取事务实例或检查上下文是否有事务