2016-02-12 31 views
0

我试图在Azure中实现数据库相关瞬态错误的重试策略,但不明白如何在此特定上下文中捕获RetryLimitExceeded类型的错误。如何在执行重试策略时捕获RetryLimitExceeded

详细说明 - 关于msdn的文章介绍了将此设置为实体框架DbConfiguration的过程,该过程非常简单。但是,它还指定我们应该处理RetryLimitExceeded异常,如果错误不是瞬态的,或者尝试的次数超出限制,则可能会抛出异常。

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

我不明白,我应该怎么捕捉异常 - 我应该换行SetExecutionStrategy在尝试捕捉还是我预计全球范围内处理的那种错误的?或者是其他东西?

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

回答

1

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

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; 
} 
+0

感谢您的回答,这对写入数据库是有意义的,但是在从数据库读取时也不会出现瞬时错误?如果是这样 - 这是一个稍微不同的问题 - 如何处理这个问题,而不用用try/catch包装每一个数据库查询? – David