【问题标题】: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 的回复,其实我已经试过了,效果很好,非常感谢。

标签: c# entity-framework transactions transactionscope


【解决方案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; 获取事务实例或检查上下文是否有事务

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多