2016-02-12 30 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