La ejecución del command requiere una connection abierta y disponible. El estado actual de la connection está roto.

Después de algún uso en qa obtenemos el siguiente error

Execution of the command requires an open and available connection. The connection's current state is broken.

Estamos usando una instancia única de EntityFramework

SOF sugiere:

Recuperación de EF de una exception de invalidation causada por la caída del server

1) crear una nueva instancia de ContectObject de vez en cuando

2) configure el número de conexiones de grupo para que sea más alto

¿Cuál es la mejor práctica para resolver esto?

Creo que es un desperdicio crear un nuevo contectObject para cada operación Dal

Creo que es un desperdicio crear un nuevo contectObject para cada operación Dal

¿Tienes alguna evidencia para esto? Creo que Entity Framework y, de hecho, la mayoría de los frameworks de acceso a los datos están diseñados para muchos contexts independientes y de corta duración. La implementación de su propio agrupamiento / almacenamiento en caching aquí suele ser un antipatrón, lo que posiblemente da como resultado resultados obsoletos, problemas de concurrency y una recuperación deficiente de fallas (como es el caso aquí).

¿Qué resources específicos crees que se desperdiciarán y has validado esto experimentalmente?

Básicamente, sugiero crear un context nuevo para cada unidad de trabajo (puede corresponder aproximadamente a una request): medir las diferencias de performance y ver si el problema desaparece (como espero que ocurra). Como parte de sus testings, desconecte ocasionalmente el server de la database de la networking para verificar que también pueda recuperarse …

Por favor, lea sobre la agrupación de conexiones .

Cuando desecha el context EF, está eliminando la connection del proveedor de la tienda subyacente. Pero, cuando elimine la connection a la tienda, no cerrará ninguna connection de nivel de transporte de manera pnetworkingeterminada, a less que no haya desactivado la agrupación de conexiones de forma explícita.

Además, EF almacena en caching las vistas de metadatos por dominio de aplicación.
Por lo tanto, la creación del context EF es barata , realmente.

Además, tenga en count que hay un rastreador de cambios en cada instancia de context. Cuando tiene un context único, su seguidor de cambios rastrea todo, que se materializó o adjuntó al context. "Seguir todo" significa que no se desechará cada instancia de entidad que haya recuperado a través del context, el rastreador saveá una reference al mismo.

No hagas instancias de context de larga vida.