¿Alguien me puede guiar cómo implementar una política de reintento con EF a SQL Azure, por favor?Entity Framework - SQL Azure Retry Policy
Respuesta
Este hilo del Foro Azure tiene algunos enlaces a buenos recursos que cubren este tema. No parece haber nada "oficial" todavía. Pero hay algunos proyectos de código abierto que te dan un buen comienzo.
A partir de la respuesta:
yo personalmente no utilizaron la biblioteca del blog menciona. En cambio, pude salirse con la tuya con WHILE LOOP con un TRY/CATCH que miraba los Números de error de SQL EXCEPTION específicos que era seguro volver a intentar. También hay un contador que básicamente evita que vuelva a intentarlo para siempre.
Estoy usando el Transiet Fault Handling Framework, provisto en lue de una mejor solución por el equipo de EF.
- Agregue el binario, o el proyecto en el enlace de arriba a su solución, y agregue la referencia a su proyecto.
- crear instancias de una política de reintento con los parámetros adecuados:
var retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(
10,
TimeSpan.FromSeconds(0.5),
TimeSpan.FromSeconds(2)
) { FastFirstRetry = true };
- Use su objeto de política de reintento para cualquier trabajo atómico en el
context
.
using(var context = new ...)
{
...//Maybe you do something to the database...
retryPolicy.ExecuteAction(() => context.SaveChanges());
}
+1 Sé que esta pregunta ya es bastante antigua, pero es un buen trabajo mencionar el Marco de tratamiento transitorio de fallas. Lo he usado en producción desde hace un tiempo y funciona fantásticamente bien para mí. –
Debe tener mucho cuidado al usar esta técnica si está haciendo SaveChanges() dentro de un TransactionScope, porque en este caso EF no ajusta los SaveChanges en un bloque BEGIN/COMMIT, sino que depende del BEGIN/COMMIT del alcance de la transacción (pruébalo con el analizador SQLServer para ver a qué me refiero). Por lo tanto, si SaveChanges() realizó 5 inserciones y una falló, un reintento posiblemente volverá a insertar el 4 que no tuvo problemas. Esta es probablemente la razón por la cual la resistencia de conexión EF 6 no permite las transacciones definidas por el usuario: [ver] (http://msdn.microsoft.com/en-US/data/dn307226) – JohnB
El Equipo Asesor de Clientes de Windows Server AppFabric han proporcionado algunas orientaciones bastante detallada en torno reintentos en this blog post.
Básicamente, tienen varias formas diferentes de usar el Marco de tratamiento de fallas transitorias (que ha sido reemplazado por el Transient Fault Handling Application Block, que es similar) para proporcionar reintentos.
El problema con el uso de la biblioteca Transient Fault Handling de acuerdo con la mayoría de la documentación que existe es que lo obliga a ajustar cada llamada a la base de datos en su aplicación.
Si utiliza Entity Framework 6 (actualmente en alfa) entonces hay algún nuevo soporte incorporado para los reintentos transitorios con la base de datos de SQL Azure (con un poco de configuración): aquí es el link
I' Hemos creado una biblioteca que le permite configurar Entity Framework para volver a intentarlo usando el bloque de manejo de fallas sin necesidad de cambiar cada llamada a la base de datos; generalmente solo necesitará cambiar su archivo de configuración y posiblemente una o dos líneas de código.
Esto le permite utilizar para Entity Framework o LINQ to SQL, aquí está el link
ha añadido conexión de la resistencia como una nueva característica para ayudar a resolver este Entity Framework 6, citando de Microsoft: "permite la recuperación automática de fallas de conexión transitoria ". Aquí está el Connection Resiliency Spec for EF6 si desea obtener más información.
¿Está implementado de manera predeterminada? ¿O tenemos que habilitarlo explícitamente? – Zapnologica
- 1. Retry Task Framework
- 2. Uso de Entity Framework con SQL Azure - Confiabilidad
- 3. Código Entity Framework Primera conexión Azure
- 4. Debugging Entity Framework Sentencias SQL
- 5. Dynamic SQL Query Entity Framework
- 6. ¿Cómo agrego Retry Logic en NHibernate para manejar las fallas transitorias en SQL Azure?
- 7. Entity Framework 4.0 Entity SQL pasando ObjectParameter nula parámetros
- 8. Entity Framework Entity SQL vs Query builder methods
- 9. Entity Framework y SQL Server Tuning Advisor
- 10. SQL para Entity Framework Count Grupo-Por
- 11. Entity Framework T-Sql "having" Equivalente
- 12. Entity Framework y SQL Server Ver
- 13. Entity Framework y SQL Server Sinónimos
- 14. ejecutar sql personalizado con entity framework?
- 15. ¿Cómo ver SQL generado desde Entity Framework?
- 16. Entity Framework y SQL Server 2012 Paging
- 17. Entity Framework, LinqToSQL e inyección sql
- 18. Linq to Sql vs Entity Framework Performance
- 19. Entity Framework pierde Sql DateTime precisión
- 20. Linq to SQL and Entity Framework Diffrences?
- 21. Optimización Entity Framework
- 22. Pensamientos sobre Entity Framework
- 23. Entity Framework Query Optimization
- 24. SQLite con Entity Framework
- 25. Entity Framework consulta XML
- 26. Entity Framework Guid
- 27. Entity Framework v4.1 COMO
- 28. Entity Framework consultas velocidad
- 29. proyecciones de Entity Framework
- 30. Entity Framework Performance Issue
Gracias Vyrotek, tendría que ser capaz de compartir su bucle while try/catch por favor? –