任何人都可以指導我如何實現EF到SQL Azure的重試策略,請。實體框架 - SQL Azure重試策略
回答
這個Azure論壇主題有一些鏈接到很好的資源,涵蓋了這個主題。目前似乎還沒有任何「官方」的東西。但是有一些開源項目會給你一個很好的開始。
從答案:
我個人沒有使用博客中提到的庫。相反,我能夠通過一個TRY/CATCH的簡單WHILE LOOP來避開可以安全重試的特定SQL EXCEPTION錯誤號。還有一個基本上阻止它「永久重試」的計數器。
我使用的是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());
}
+1我知道這個問題現在已經很老了,但提到瞬態故障處理框架的工作很好。我一直在生產中使用它一段時間,它對我來說非常適合。 – 2011-08-09 12:15:46
如果您在TransactionScope中執行SaveChanges(),則必須非常小心,因爲在這種情況下,EF不會將SaveChanges包裝在BEGIN/COMMIT塊中,而是依賴於事務範圍的BEGIN/COMMIT(嘗試使用SQLServer分析器查看我的意思)。因此,如果SaveChanges()執行了5次插入,並且一次失敗,則重試可能會重新插入沒有問題的4次。這可能是EF 6連接彈性不允許用戶定義的事務的原因:[參見](http://msdn.microsoft.com/zh-cn/data/dn307226) – JohnB 2014-10-02 14:29:54
將Windows Server AppFabric的客戶顧問團隊已經在this blog post提供圍繞重一些相當詳細的指導。
基本上,他們已經有很多不同的方式來使用瞬態故障處理框架(它已經被類似的Transient Fault Handling Application Block所取代)以提供重試。
Entity Framework 6增添連接彈性作爲一個新的功能,以幫助解決這個問題,微軟引用:「啓用從瞬態連接故障「自動恢復」。如果你想了解更多信息,請點擊這裏Connection Resiliency Spec for EF6。
默認情況下是否實施?或者我們必須明確啓用它? – Zapnologica 2016-03-05 10:54:46
- 1. SQL Azure重試邏輯框架TransientFaultHandling是否附帶默認重試策略?
- 2. 實體框架,離線使用策略?
- 3. Azure搜索重試策略
- 4. SQL Azure架構升級策略
- 5. 與SQL Azure的兼容實體框架?
- 6. Azure Hadoop和實體框架
- 7. 外部javascript框架調試策略
- 8. 實體框架代碼優先 - 開發策略
- 9. NserviceBus忽略重試策略
- 10. 調試實體框架SQL語句
- 11. 策略處理使用實體框架4.1
- 12. 實體框架5和代碼生成策略
- 13. Silverlight和實體框架解決方案策略
- 14. 實體框架數據加載策略比較
- 15. 實體框架POCO更改跟蹤策略
- 16. 實體框架6
- 17. 實體框架和Azure數據同步
- 18. 實施ServiceBusTransientErrorDetectionStrategy的指數重試策略
- 19. 瞭解logstash重試策略
- 20. 原始SQL實體框架
- 21. SQL,MVC,實體框架
- 22. 測試實體框架3.5
- 23. 實體框架 - 動態sql
- 24. 實體框架SQL查詢
- 25. 實體框架創建重複實體
- 26. Windows Azure/SQL Azure實體框架中的動態數據庫/架構
- 27. 實體刪除策略
- 28. 實體更新策略
- 29. Android okHttp重試策略
- 30. 實體框架和重複
感謝Vyrotek,你能分享你的while循環try/catch嗎? – 2011-04-20 02:31:47