2011-12-07 9 views
5

En mi proyecto actual, utilizamos Entity Framework y, en este contexto, almacenamos datos procedentes de un sistema remoto. Cuando intento guardar objetos, necesito saber de manera confiable si una excepción es algo de lo que se puede recuperar o no.Marco de entidad: cómo detectar excepciones recuperables frente a irrecuperables

Para aclarar, por "recuperado de" quiero decir que simplemente intentar la operación nuevamente un poco más tarde sería seguro y podría tener éxito. Esto incluiría problemas con la conectividad de red, reinicio del servidor de base de datos o situaciones similares.

No recuperable en este contexto sería básicamente cualquier otra cosa, incluidas las restricciones de integridad y los errores internos de Entity Framework (la base de datos no está sincronizada con el modelo EF). Se podría argumentar que algunas restricciones de integridad podrían recuperarse si alguien "corrige" los datos, pero en este caso solo habrá un solo escritor.

¿Existe una manera confiable de categorizar una excepción proveniente de Entity Framework en una de estas dos categorías?

Respuesta

2

creo que tendrá que subir con su propia lista de excepciones que usted está dispuesto a probar y manipular. La lista de excepciones que podría clasificar como recuperable o no es probable que no sea la misma en dos entornos. Dicho esto, tal vez usted puede comenzar aquí:

Where to find ADO.NET Entity Framework error list?

+0

Incluso encontrar la lista de excepciones y descubrir cuándo pueden arrojarse es una tarea no trivial. Lo estoy haciendo, pero esperaba que alguien más lo hubiera hecho antes ... – SoftMemes

0

Verificar los siguientes artículos -

http://msdn.microsoft.com/en-us/library/bb738618.aspx

http://msdn.microsoft.com/en-us/library/bb336792.aspx

http://msdn.microsoft.com/en-us/library/system.data.optimisticconcurrencyexception.aspx

http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008/07/02/10564.aspx

Estoy seguro que más de la OptimisticConcurrencyException se eleva de .SaveChanges() - uso a

try { 
} catch(ExceptionType1) { 
} catch(ExceptionType2) { 
} catch(ExceptionType3) { 
} 

declaración a capturar diferentes excepciones ...

+0

Lo siento, pero 4 enlaces a variaciones en OptimisticConcurrencyException no es de mucha ayuda. Es esa lista de "otras excepciones" que necesito y todas las condiciones de cuándo pueden ser arrojadas. – SoftMemes

+0

Bueno, obviamente no hay mucha información sobre esto, así que configure una captura de prueba e imite los diferentes tipos de excepción que pueden ocurrir - apague su base de datos, ponga algunos modelos rotos en un procedimiento almacenado ... – Spikeh

+0

Por qué obviamente ? La documentación de MSDN tiene una sección para las excepciones que un método puede arrojar, desafortunadamente raramente se llena apropiadamente. – SoftMemes

Cuestiones relacionadas