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 (который был заменен Блок приложений обработки переходных ошибок, что аналогично), чтобы обеспечить повторные попытки.