Entity Framework :Using Transaction Scope 如何检查 DbContext 是不是有事务?

Posted

技术标签:

【中文标题】Entity Framework :Using Transaction Scope 如何检查 DbContext 是不是有事务?【英文标题】:Entity Framework :Using Transaction Scope how to check whether DbContext has transaction?Entity Framework :Using Transaction Scope 如何检查 DbContext 是否有事务? 【发布时间】:2018-05-09 21:18:14 【问题描述】:

如前所述here 如果我们使用 Database.BeginTransaction() 开始事务,则使用 E​​ntity Framework 6 我们可以使用以下语句检查上下文是否有事务:

var transaction = db.Database.CurrentTransaction;

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

var transactionScope = new TransactionScope();

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

【问题讨论】:

是的,确定 Transaction.Current。 感谢@Evk 的回复,其实我已经试过了,效果很好,非常感谢。 【参考方案1】:

使用实体框架 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; 获取事务实例或检查上下文是否有事务

【讨论】:

以上是关于Entity Framework :Using Transaction Scope 如何检查 DbContext 是不是有事务?的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework :Using Transaction Scope 如何检查 DbContext 是不是有事务?

Query Using Entity Framework Error with Database Table name Error

在Entity Framework中使用事务

如何在 ASP.NET Core Razor Pages 项目的 _layout.cshtml 文件中使用 Razor Page Using Entity Framework 作为部分视图?

entity framework 公共类

Entity Framework——执行sql语句