/ / O DbContext no EF deve ter um tempo de vida curto? - c #, estrutura de entidade

O DbContext no EF deve ter um tempo de vida curto? - c #, estrutura de entidade

Eu tenho algumas tarefas de longa duração no meu servidor. Basicamente, eles são como tarefas agendadas - elas são executadas de tempos em tempos.

Todos eles exigiam acesso ao banco de dados e eu uso o Entity Framework para isso. Cada tarefa usa um DbContext para acesso.

O objeto DbContext deve ser recriado a cada execução ou devo reutilizá-lo?

Respostas:

3 para resposta № 1

Eu deveria dizer "depende" como provavelmentecenários em que ambas as respostas são válidas, no entanto, a resposta mais razoável é "o contexto deve ser descartado assim que não for necessário", o que na prática significa "descartá-lo mais cedo do que tarde".

O risco que surge de tal resposta é queos novatos às vezes concluem que o contexto deve ser descartado o mais possível, o que às vezes leva a um código que reviso onde há "usings" consecutivos que criam um contexto, usam para uma ou duas operações, descartam e então outro contexto surge na próxima linha . Isso obviamente não é recomendado também.

No caso de aplicativos da web, o ciclo de vida natural éconectado a um ciclo de vida de solicitações da web. No caso de serviços do sistema / outras aplicações de execução longa, uma das estratégias de ciclo de vida é "por instância de processo de negócio" / "por instância de uso" onde implementações de processamento de negócios / caso de uso definem fronteiras naturais onde instâncias separadas de contextos fazem sentido.


1 para resposta № 2

Sim, DbContext só deve viver por um tempo muito curto. É efetivamente sua unidade de trabalho

Você deve definitivamente criá-lo cada vez que você for usá-lo. (Bem, você deve injetá-lo, mas essa é outra discussão :-))


Atualização: OK, eu aceito que "criá-lo cada vez que você vai usá-lo" poderia ser enganador. Eu estou tão acostumado a contextualizar ser uma instância em uma classe que é injetada e assim vive apenas pela vida de um pedido que eu esforce-se para pensar de outra maneira ... a resposta do @wiktor é definitivamente melhor, pois expressa mais corretamente a idéia de que você deve "desfazer-se mais cedo ou mais tarde"