星空网 > 软件开发 > ASP.net

Entity Framework 6 暂停重试执行策略

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

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

 1 using System.Data.Entity; 2 using System.Data.Entity.SqlServer; 3  4 namespace Demo 5 { 6   public class MyConfiguration : DbConfiguration 7   { 8     public MyConfiguration() 9     {10       this.SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());11     }12   }13 }

允许挂起执行策略

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

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

 1 using System.Data.Entity; 2 using System.Data.Entity.Infrastructure; 3 using System.Data.Entity.SqlServer; 4 using System.Runtime.Remoting.Messaging; 5  6 namespace Demo 7 { 8   public class MyConfiguration : DbConfiguration 9   {10     public MyConfiguration()11     {12       this.SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy13        ? (IDbExecutionStrategy)new DefaultExecutionStrategy()14        : new SqlAzureExecutionStrategy());15     }16 17     public static bool SuspendExecutionStrategy18     {19       get20       {21         return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false;22       }23       set24       {25         CallContext.LogicalSetData("SuspendExecutionStrategy", value);26       }27     }28   }29 }

使用上面标志

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

 1 using (var db = new BloggingContext()) 2 { 3  MyConfiguration.SuspendExecutionStrategy = true; 4  5  // Perform without retry logic 6  db.Blogs.Add(new Blog { Url = "romiller.com" }); 7  db.SaveChanges(); 8  9  MyConfiguration.SuspendExecutionStrategy = false;10 11 }

何时使用该功能

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




原标题:Entity Framework 6 暂停重试执行策略

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

lazada怎么上传图片:https://www.goluckyvip.com/tag/85389.html
lazada如何上传产品图片:https://www.goluckyvip.com/tag/85390.html
lazada本土店铺发货时效:https://www.goluckyvip.com/tag/85391.html
lazada印尼本土店:https://www.goluckyvip.com/tag/85392.html
lazada本土店发货时效:https://www.goluckyvip.com/tag/85393.html
lazada菲律宾本土店:https://www.goluckyvip.com/tag/85394.html
从园岭新村到大梅沙海滨总站坐什么车:https://www.vstour.cn/a/363191.html
七月份适合去日本旅游吗 7月份去日本哪里好玩:https://www.vstour.cn/a/363192.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流