【发布时间】:2016-05-03 06:49:26
【问题描述】:
请谁能指导我如何使用 EF 对 SQL Azure 实施重试策略。
【问题讨论】:
标签: c# sql entity-framework azure-sql-database
请谁能指导我如何使用 EF 对 SQL Azure 实施重试策略。
【问题讨论】:
标签: c# sql entity-framework azure-sql-database
我正在使用Transiet Fault Handling Framework,这是 EF 团队提供的更好的解决方案。
var retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(
10,
TimeSpan.FromSeconds(0.5),
TimeSpan.FromSeconds(2)
) { FastFirstRetry = true };
context 上的任何原子工作。 using(var context = new ... )
{
...//Maybe you do something to the database...
retryPolicy.ExecuteAction(() => context.SaveChanges());
}
【讨论】:
Entity Framework 6 添加了连接弹性作为一项新功能来帮助解决这个问题,引用 Microsoft 的话:“启用从短暂连接故障中自动恢复”。如果你想了解更多,这里是Connection Resiliency Spec for EF6。
【讨论】:
此 Azure 论坛线程有一些指向涵盖该主题的优秀资源的链接。似乎还没有任何“官方”的东西。但是有一些开源项目可以给你一个很好的开始。
来自答案:
我个人没有使用博客提到的库。相反,我能够通过一个简单的 WHILE LOOP 逃脱,它带有一个 TRY/CATCH,它监视可以安全重试的特定 SQL 异常错误号。还有一个计数器基本上可以防止它永远“重试”。
【讨论】:
Windows Server AppFabric 客户咨询团队在 this blog post 中提供了一些关于重试的相当详细的指导。
基本上,他们有许多不同的方式来使用瞬态故障处理框架(该框架已被类似的Transient Fault Handling Application Block 取代)以提供重试。
【讨论】: