2014-12-08 12 views
5

Recentemente ho scoperto che Entity Framework ha un modo molto semplice per rendere resilienti le connessioni in SQL Azure. Esiste un modo consigliato per ottenere lo stesso risultato in Dapper?Come rendere Dapper resiliente per SqlAzure?

+0

Dapper è solo un wrapper di ADO.NET; cosa * esattamente * intendi per "fare ... resiliente" qui? cosa vuoi che faccia in modo diverso? –

+2

Voglio tutte le chiamate Execute e Query effettuate in Dapper per sopravvivere a piccoli problemi di cloud causati da Azure. Seguendo questo link http://blogs.msdn.com/b/dotnet/archive/2013/10/17/net-framework-4-5-1-rtm-gt-start-coding.aspx significa che potrei semplicemente aggiornare il mio framework alle connessioni 4.5.1 e ADO.Net all'ambiente environmnet di SQL Azure sarà automaticamente resiliente? –

+1

No @JakobLithner che non sarà sufficiente. Quel collegamento discute solo disconnessioni di connessione. Non menziona errori transitori che sono la preoccupazione principale. –

risposta

10

Il modo più veloce per la protezione dai problemi di connessione in C# contro Azure è Microsoft Transient Fault Handling Block.

Per esempio il codice di seguito sarebbe riprovare fino a 3 volte con intervalli di 1 secondo in-tra quando si tenta di aprire una connessione a un database SQL di Windows Azure:

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

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

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

FixedInterval è la politica marcia indietro, in modo da proverò, aspetta 1 secondo, riprova, ecc. fino a quando non viene provato 3 volte.

SqlDatabaseTransientErrorDetectionStrategy è semplicemente un controllo sull'eccezione generata, se si tratta di un'eccezione di connessione che dovrebbe essere ritentata, dirà allo RetryPolicy di eseguire nuovamente l'azione. Se non si tratta di un'eccezione di connessione, l'azione non verrà eseguita e l'eccezione originale verrà generata normalmente.

Per quanto riguarda quando è necessario utilizzarlo con Dapper; puoi tranquillamente riprovare ad aprire le connessioni e leggere le operazioni, ma essere consapevole o riprovare le operazioni di scrittura poiché c'è il rischio di duplicare inserimenti, provare a eliminare una riga due volte ecc.

Maggiori dettagli here, questa libreria può essere trovata come NuGet Package here che include le strategie di rilevamento per Windows Azure.