EF6引入一个弹性连接的功能,也就是允许重新尝试执行失败的数据库操作。某些复杂的场景中,可能需要启用或停用重试执行的策略,但是EF框架暂时尚未提供直接的设置开关,将来可能会加入这种配置。幸运的是,很容易自己实现该设置功能。

最简单的注册执行策略的方法是通过基于代码的配置。下面代码是一个典型的配置类,启用SqlAzureExecutionStrategy策略(允许重试执行SQL Azure中已知的可重试异常)。

 using System.Data.Entity;
using System.Data.Entity.SqlServer; namespace Demo
{
public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
this.SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
}
}
}

允许挂起执行策略

设置完新的执行策略后,所有的操作都会遵循新的执行策略。我们可以实现一个标志参数,在默认(不重试)和SqlAzureExecutionStrategy之间进行切换。

注意:我们通过CallContext获取或设置该标志,这可以确保我们的操作在EF6中的异步查询、保存中正确。

 using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.SqlServer;
using System.Runtime.Remoting.Messaging; namespace Demo
{
public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
this.SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
? (IDbExecutionStrategy)new DefaultExecutionStrategy()
: new SqlAzureExecutionStrategy());
} public static bool SuspendExecutionStrategy
{
get
{
return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false;
}
set
{
CallContext.LogicalSetData("SuspendExecutionStrategy", value);
}
}
}
}

使用上面标志

现在就可以使用该标志禁用在某些操作上禁用“重试执行策略”。

 using (var db = new BloggingContext())
{
MyConfiguration.SuspendExecutionStrategy = true; // Perform without retry logic
db.Blogs.Add(new Blog { Url = "romiller.com" });
db.SaveChanges(); MyConfiguration.SuspendExecutionStrategy = false; }

何时使用该功能

最常见的场景是某些操作我们不需要重试执行,例如用户初始化事务。

最新文章

  1. 自定义制作iso镜像
  2. Windows文件系统漏洞
  3. sql server 复制需要有实际的服务器名称才能连接到服务器(转载)
  4. Implicitly Typed Local Variables
  5. 用FlexSlider制作支付宝2013版幻灯片演示插件
  6. 基于python的《Hadoop权威指南》一书中气象数据下载和map reduce化数据处理及其可视化
  7. RobotFramework下的http接口自动化Create Http Context关键字的使用
  8. ubuntu mysql表名大小写区分
  9. RabbitMQ消息队列
  10. HTML5-语义化标签
  11. 配置Oracle GoldenGate安全性
  12. GDT临时分段
  13. 48- java Arrays.sort和collections.sort()再次总结
  14. Linux 内核开发 - 内核定时器
  15. 安装VCSA6.5(vCenter Server Appliance 6.5)
  16. nginx封ip,禁用IP段的设置说明
  17. oracle union 用法
  18. 基于SSH的客户关系管理系统CRM-JavaWeb项目-有源码
  19. java正则表达式校验移动电话、固话、邮编的校验
  20. 【CF802C】 Heidi and Library (hard)(费用流)

热门文章

  1. MySQL 主从同步失败,数据表修复
  2. Dbvisualizer设置SQL语句自动提示
  3. [iOS]在xcode的iOS虚拟机中对BLE(蓝牙4.0)进行调试
  4. JDBC模板对象是多例的
  5. aop中的顾问
  6. IDEA快捷键【收藏】
  7. LoadRunner11学习记录三 -- 迭代和并发
  8. Windows多线程编程入门
  9. Photo1
  10. VWAP算法(成交量加权平均价)