Entity Framework :使用Transaction Scope如何查看DbContext是否有事务?

Entity Framework :Using Transaction Scope how to check whether DbContext has transaction?

如前所述 使用 Entity Framework 6 如果我们使用 Database.BeginTransaction() 开始交易 我们可以使用以下语句检查上下文是否有事务:

var transaction = db.Database.CurrentTransaction;

不幸的是,如果我们使用TrasctionScope,这种方式就不起作用了 开始交易:

var transactionScope = new TransactionScope();

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

使用entity framework 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();
                 }
             }
    
  • 第二种方式,使用TransactionScope

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

    `var transaction = context.Database.CurrentTransaction;`
    
  • 另一方面,如果您使用 TrasctionScope 开始交易,您必须使用:

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