Entity Framework 6 暂停重试执行策略
2024-09-26 15:16:01
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; }
何时使用该功能
最常见的场景是某些操作我们不需要重试执行,例如用户初始化事务。
最新文章
- 自定义制作iso镜像
- Windows文件系统漏洞
- sql server 复制需要有实际的服务器名称才能连接到服务器(转载)
- Implicitly Typed Local Variables
- 用FlexSlider制作支付宝2013版幻灯片演示插件
- 基于python的《Hadoop权威指南》一书中气象数据下载和map reduce化数据处理及其可视化
- RobotFramework下的http接口自动化Create Http Context关键字的使用
- ubuntu mysql表名大小写区分
- RabbitMQ消息队列
- HTML5-语义化标签
- 配置Oracle GoldenGate安全性
- GDT临时分段
- 48- java Arrays.sort和collections.sort()再次总结
- Linux 内核开发 - 内核定时器
- 安装VCSA6.5(vCenter Server Appliance 6.5)
- nginx封ip,禁用IP段的设置说明
- oracle union 用法
- 基于SSH的客户关系管理系统CRM-JavaWeb项目-有源码
- java正则表达式校验移动电话、固话、邮编的校验
- 【CF802C】 Heidi and Library (hard)(费用流)