¿Cómo hacer que Dapper sea resistente para SqlAzure?

azure-sql-database dapper resiliency

Pregunta

Recientemente descubrí que Entity Framework tiene una manera muy fácil de hacer que las conexiones sean resilientes en SQL Azure. ¿Hay alguna manera recomendada de lograr lo mismo en Dapper?

Respuesta aceptada

La forma más rápida de protegerse contra los problemas de conexión en C # frente a Azure es el Bloqueo de fallas transitorias de Microsoft .

Por ejemplo, el código siguiente intentaría de nuevo hasta 3 veces con intervalos de 1 segundo entremedias cuando intente abrir una conexión a una base de datos SQL de Windows Azure:

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

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

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

FixedInterval es la política de retroceso, por lo que intentará, esperará 1 segundo, intentará de nuevo, etc. hasta que se pruebe 3 veces.

SqlDatabaseTransientErrorDetectionStrategy simplemente controla la excepción lanzada, si se trata de una excepción de conexión que debe volver a intentarse, le indicará a RetryPolicy que ejecute la acción nuevamente. Si no se trata de una excepción de conexión, la acción no se ejecutará y la excepción original se lanzará normalmente.

En cuanto a cuándo deberías usarlo con Dapper; puede volver a intentar abrir conexiones y leer operaciones con seguridad, sin embargo, tenga en cuenta o reintente las operaciones de escritura, ya que existe el riesgo de duplicar inserciones, intentar eliminar una fila dos veces, etc.

Más detalles aquí , esta biblioteca se puede encontrar como un Paquete NuGet aquí que incluye las estrategias de detección para Windows Azure.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué