首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用实体框架6事务

使用实体框架6事务
EN

Stack Overflow用户
提问于 2014-04-09 03:20:46
回答 1查看 1.7K关注 0票数 0

我有一组关于在EF 6中使用事务的问题。我在数据库查询中使用了以下代码模板:

代码语言:javascript
代码运行次数:0
运行
复制
using (var ctx = new MyContext(connectionString))
{
    using (var tx = ctx.Database.BeginTransaction(IsolationLevel.Snapshot))
    {
          try
          {
               // query database
               ctx.SaveChanges();
               tx.Commit();
          }
          catch(Exception ex)
          {
               tx.Rollback();

               if(ex is A) // handle A
               if(ex is B) // handle B                   

               throw;
          }
    } 
}
  • 我将只查询数据库一次,调用SaveChanges()一次。如果发生异常,是否需要回滚事务?
  • 我的一些事务只会读取数据,所以我不会调用SaveChanges()。在这种情况下,我应该仍然调用Commit()吗?
  • 我正在考虑使用SqlAzureExecutionStrategy来实现连接弹性。在某一时刻会发生瞬态故障吗?它只是在执行查询或调用SaveChanges()时使用吗?ctxtxCommit()调用的初始化如何?它们会导致这样的失败吗?
  • 是否有一种不太紧凑的方式来查询事务中的数据库?对于每一个查询,我都需要使用上面的代码模板,它显著重复了代码,例如两个使用语句、try-catch块和泛型异常处理。我相信,最后一种方法可以通过从SqlAzureExecutionStrategyDbExecutionStrategy派生出来。我完全支持尽可能多地重构代码。
EN

回答 1

Stack Overflow用户

发布于 2014-04-09 04:37:49

您不必实际使用实体框架.中的事务

默认的隔离模式是读取提交的,完全符合99%的需求,例如。读取数据。当您想保存对数据库所做的更改(Create、Update、Delete)时,EntityFramework足够聪明地创建一个事务,而无需在幕后通知您来包装这些更改。您可以确保所有的东西都会被保存,或者每一个更改都会被丢弃(原子性)。

看这里,https://coderwall.com/p/jnniww

基本实体框架操作块。

代码语言:javascript
代码运行次数:0
运行
复制
using (var context = new ProductContext()) 
{ 
    try
    {
        // Perform data access using the context 
        context.SaveChanges();
    }
    catch(Exception ex)
    {
        //handle exception
    }

}

希望它能对你有帮助,祝你今天愉快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22952166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档