Entity Framework - политика повторения SQL Azure
Может ли кто-нибудь указать мне, как реализовать политику повтора с EF для SQL Azure, пожалуйста.
Ответы
Ответ 1
Я использую Transity 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());
}
Ответ 2
Entity Framework 6 добавила отказоустойчивость подключений как новую функцию, которая поможет решить эту проблему, цитируя Microsoft: "обеспечивает автоматическое восстановление после сбоев при сбое". Ниже приведена спецификация отказоустойчивости соединения для EF6, если вы хотите узнать больше.
EF6 в NuGet
Ответ 3
Проблема с использованием библиотеки Transient Fault Handling в соответствии с большей частью документации заключается в том, что она заставляет вас обернуть каждый вызов базы данных в вашем приложении.
Если вы используете Entity Framework 6 (в настоящее время в альфа-версии), то есть некоторая новая встроенная поддержка повторных попыток с Azure SQL Database (с небольшой конфигурацией): вот ссылка
Я создал библиотеку, которая позволяет настроить Entity Framework на повторную попытку с использованием блока обработки ошибок, не требуя изменения каждого вызова базы данных - обычно вам нужно будет только изменить свой конфигурационный файл и, возможно, одну или две строки кода.
Это позволяет использовать его для Entity Framework или Linq To Sql, вот ссылка
Ответ 4
В этом разделе форума Azure есть ссылки на хорошие ресурсы, которые охватывают эту тему. По-видимому, пока еще ничего не должно быть "официальным". Но есть проекты с открытым исходным кодом, которые дают вам неплохой старт.
http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/3a9ed384-5374-438e-a8a4-ff4bd8000738/#27b5251a-bff5-4282-980c-ad43fdd85591
Из ответа:
http://blogs.msdn.com/b/appfabriccat/archive/2010/10/28/best-practices-for-handling-transient-conditions-in-sql-azure-client-applications.aspx
Я лично не использовал библиотеку, о которой упоминает блог. Вместо этого мне удалось уйти с простым WHILE LOOP с TRY/CATCH, который следил за конкретными номерами ошибок SQL EXCEPTION, которые можно было бы безопасно повторить. Существует также счетчик, который в основном предотвращает его "повторную попытку" навсегда.
Ответ 5
Консультационная группа клиентов Windows Server AppFabric предоставила некоторые довольно подробные рекомендации по повторным попыткам в этом сообщении в блоге.
В принципе, у них есть несколько различных способов использования Framework Transient Fault Handling Framework (который был заменен Блок приложений обработки переходных ошибок, что аналогично), чтобы обеспечить повторные попытки.