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?
risposta
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.
- 1. Rendere la tastiera Android resiliente contro gli attacchi di KeyLogger
- 2. Reimposta cache per Dapper
- 3. È possibile rendere Hudson più resiliente a piccoli problemi di rete?
- 4. Dapper. Cercapersone
- 5. Come utilizzare Dapper in ServiceStack
- 6. Come ottenere SqlDataReader con Dapper?
- 7. Quanto resiliente dovrebbe essere la mia app web?
- 8. Come implementare SQL Azure Transient Fault Framework per Dapper?
- 9. Come ottenere valori per oggetti figlio usando Dapper ORM?
- 10. entità mappatura in Dapper
- 11. Dapper Multi-mappatura Problema
- 12. Dapper supporta Enums?
- 13. Invia SqlParameter a Dapper
- 14. Dapper semplice mappatura
- 15. Dapper e in condizione
- 16. Iniezioni Dapper e SQL
- 17. Dapper ORM oggetti nidificati
- 18. Dapper mappatura intermedia mappatura
- 19. Dapper SqlMapperExtensions/Dapper.Contrib?
- 20. Dapper con MVCMiniProfiler
- 21. Dapper (connection.Query o connection.Execute)
- 22. Come passare un parametro null con Dapper
- 23. Spiegazione del buffer/cache dapper
- 24. Dapper e Oracle Clob tipo
- 25. Utilizzo di Breeze.js con Dapper
- 26. Interrogazione modelli astratti in dapper
- 27. dapper nuget 1.7 mapping enums
- 28. Transazioni in "dapper-dot-net"
- 29. Dapper Multi-map livello successivo
- 30. Clausola dynamic where in dapper
Dapper è solo un wrapper di ADO.NET; cosa * esattamente * intendi per "fare ... resiliente" qui? cosa vuoi che faccia in modo diverso? –
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? –
No @JakobLithner che non sarà sufficiente. Quel collegamento discute solo disconnessioni di connessione. Non menziona errori transitori che sono la preoccupazione principale. –