entity framework – SQL Azure重试策略
请问任何人都可以指导我如何使用EF to SQL Azure实现重试策略。
我使用的是Transiet故障处理框架 ,由EF团队提供更好的解决方案。
- 将二进制文件或上面链接中的项目添加到您的解决方案中,并添加对项目的引用。
- 使用合适的参数实例化重试策略:
var retryPolicy = new RetryPolicy( 10, TimeSpan.FromSeconds(0.5), TimeSpan.FromSeconds(2) ) { FastFirstRetry = true };
- 将重试策略对象用于
context
任何primefaces工作。
using(var context = new ... ) { ...//Maybe you do something to the database... retryPolicy.ExecuteAction(() => context.SaveChanges()); }
entity framework6增加了连接弹性作为一项新function来帮助解决这个问题,引用微软的话说:“ 支持从瞬态连接故障中自动恢复 ”。 如果您想了解更多信息,请参阅EF6的连接弹性规范 。
NuGet的EF6
根据大多数文档使用Transient Fault Handling库的问题在于它强制您在应用程序中包装每个数据库调用。
如果您使用Entity Framework 6(目前处于alpha版本),那么对Azure SQL数据库的瞬态重试有一些新的内置支持(稍加配置):这是链接
我创建了一个库,允许您配置entity framework以使用故障处理块重试,而无需更改每个数据库调用 – 通常您只需要更改配置文件,可能需要更改一行或两行代码。
这允许您将它用于Entity Framework或Linq To Sql,这里是链接
此Azure论坛主题提供了一些指向此主题的良好资源的链接。 似乎还没有任何“正式”的东西。 但是有一些开源项目可以给你一个很好的开端。
从答案:
我个人没有使用博客提到的图书馆。 相反,我能够通过一个简单的WHILE LOOP来获取一个TRY / CATCH,它可以查看可以安全重试的特定SQL EXCEPTION错误号。 还有一个计数器,基本上可以防止它永远“重试”。
Windows Server AppFabric客户咨询团队在此博客文章中提供了一些关于重试的相当详细的指导。
基本上,他们有许多不同的方法来使用瞬态故障处理框架(由于瞬态故障处理应用程序块已经被类似)取代,以便提供重试。