/ / ¿Debería el DbContext en EF tener una vida útil corta? - c #, entidad-marco

¿Debería el DbContext en EF tener una vida útil corta? - c #, entidad-marco

Tengo algunas tareas de larga ejecución en mi servidor. Básicamente, son como tareas programadas: se ejecutan de vez en cuando.

Todos ellos requerían acceso a la base de datos y yo uso Entity Framework para eso. Cada tarea utiliza un DbContext para el acceso.

¿Debería recrearse el objeto DbContext en cada ejecución o debería reutilizarlo?

Respuestas

3 para la respuesta № 1

Debería decir "depende" ya que probablemente haylos escenarios en los que ambas respuestas son válidas, sin embargo, la respuesta más razonable es "el contexto debe eliminarse tan pronto como no sea necesario", que en la práctica significa "disponer más pronto que tarde".

El riesgo que viene de tal respuesta es quelos recién llegados a veces concluyen que el contexto debe eliminarse lo más a menudo posible, lo que a veces lleva a un código que reviso cuando hay "usos" consecutivos que crean un contexto, lo utilizan para una o dos operaciones, eliminan y luego aparece otro contexto en la siguiente línea . Por supuesto, esto tampoco es recomendable.

En el caso de aplicaciones web, el ciclo de vida natural esConectado con un ciclo de vida de solicitudes web. En el caso de los servicios del sistema / otras aplicaciones de ejecución prolongada, una de las estrategias del ciclo de vida es "por instancia de proceso de negocio" / "por instancia de caso de uso" donde las implementaciones de casos de uso / procesamiento de negocios definen bordes naturales donde tienen sentido las instancias separadas de contextos.


1 para la respuesta № 2

Sí, DbContext Solo debe vivir por un tiempo muy corto. Es efectivamente tu unidad de trabajo.

Definitivamente deberías crearlo cada vez que lo vayas a usar. (Bueno, deberías inyectarlo, pero esa es otra discusión :-))


Actualización: De acuerdo, acepto que "crearlo cada vez que lo vayas a utilizar" podría ser engañoso. Estoy acostumbrado a contextualizar el hecho de ser una instancia en una clase que se inyecta y por lo tanto vive solo durante la vida de una solicitud que Lucha para pensar en ello de otra manera ... La respuesta de @wiktor es definitivamente mejor, ya que expresa más correctamente la idea de que debes "deshacerte más temprano que tarde".