如何在实现重试策略时捕获RetryLimitExceeded

时间:2016-02-12 08:28:59

标签: c# .net entity-framework azure episerver

我正在尝试为Azure中的数据库关联瞬态错误实现重试策略,但不了解如何在此特定上下文中捕获RetryLimitExceeded类型的错误。

详细说明 - 以下关于msdn的文章描述了将其设置为实体框架DbConfiguration的过程,这很容易。但是它还指定我们应该处理RetryLimitExceeded异常,如果错误不是瞬态相关的,或者尝试次数超过限制,则可能抛出异常。

https://msdn.microsoft.com/en-us/data/dn456835.aspx

我不明白我应该如何捕获异常 - 我应该在try catch中包装SetExecutionStrategy还是我希望全局处理这种错误?或其他什么?

public class IntranetDBConfiguration : DbConfiguration
{
    public IntranetDBConfiguration()
    {
        SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); //default is 5 retries up to 30 seconds.
    }
}

1 个答案:

答案 0 :(得分:1)

是的,您必须catch为您提交SaveChanges()上下文的异常。你可以尝试这样的事情。

try
{
    using (MyEntities context = new MyEntities ())
    {
        // do your code
        MyConfiguration.SuspendExecutionStrategy = true;
        context.Entity.Add(entity);
        context.SaveChanges();
    }
}
catch (Exception ex)
{
    logger.Warn("Connection error with database server.", ex);
}
finally
{
    //Enable retries again...
    MyConfiguration.SuspendExecutionStrategy = false;
}