2014-12-08 18 views
5

Niedawno odkryłem, że Entity Framework ma bardzo łatwy sposób na tworzenie połączeń odpornych na SQL Azure. Czy jest jakiś zalecany sposób osiągnięcia tego samego w Dapper?Jak sprawić, by Dapper był odporny na SqlAzure?

+0

Dapper jest po prostu opakowaniem wokół ADO.NET; co * dokładnie * masz na myśli przez "uczynić ... odpornym" tutaj? co chcesz zrobić inaczej? –

+2

Chcę wykonywać wszystkie wywołania Execute i Query, które wykonuję w Dapper, aby przetrwać drobne problemy z chmurą spowodowane przez Azure. Po tym linku http://blogs.msdn.com/b/dotnet/archive/2013/10/17/net-framework-4-5-1-rtm-gt-start-coding.aspx oznacza to, że mogę po prostu zaktualizować moje środowisko do połączeń 4.5.1 i ADO.Net do środowiska SQL Azure będzie automatycznie odporne? –

+1

Nie @JakobLithner, które nie będą wystarczające. Ten link omawia tylko rozłączenia połączenia. Nie wspomina o przejściowych błędach, które są głównym problemem. –

Odpowiedz

10

Najszybszym sposobem zabezpieczenia się przed problemami z połączeniem w języku C# z Azure jest Microsoft Transient Fault Handling Block.

Na przykład poniższy kod będzie ponowić próbę zapisu do 3 razy 1-sekundowych odstępach w międzyczasie, gdy próbuje otworzyć połączenie z bazą danych systemu Windows Azure SQL:

var retryStrategy = new FixedInterval(3, TimeSpan.FromSeconds(1)); 

var retryPolicy = 
    new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryStrategy); 

retryPolicy.ExecuteAction(() => myConnection.Open()); 

FixedInterval jest polityka wycofać, więc spróbuję, odczekaj 1 sekundę, spróbuj ponownie, itd., aż spróbujesz 3 razy.

SqlDatabaseTransientErrorDetectionStrategy po prostu sprawdza wyjątek, jeśli jest to wyjątek połączenia, który powinien zostać ponownie sprawdzony, pokaże RetryPolicy, aby ponownie wykonać akcję. Jeśli nie jest to wyjątek połączenia, akcja nie zostanie wykonana, a oryginalny wyjątek zostanie zgłoszony jako normalny.

Co do tego, kiedy należy go używać z Dapper; można bezpiecznie ponawiać próby otwierania połączeń i odczytywać operacje, należy jednak pamiętać lub ponawiać operacje zapisu, ponieważ istnieje ryzyko duplikowania wstawek, próby dwukrotnego usunięcia wiersza itp.

Więcej szczegółów here, ta biblioteka może być znaleziona jako NuGet Package here która obejmuje strategie wykrywania dla Windows Azure.

Powiązane problemy