Gerenciando a vida útil EntityConnection
-
24-09-2019 - |
Pergunta
Houve muitas perguntas sobre o gerenciamento EntityContext vida,
por exemplo Instanciando um contexto em Linq para entidades
Cheguei à conclusão de que o contexto da entidade deve ser considerado uma unidade de trabalho e, portanto, não é reutilizado. Excelente.
Mas enquanto fazia algumas pesquisas para acelerar meu acesso ao banco de dados, encontrei esta postagem no blog ...
Melhorando o desempenho da estrutura da entidade
O post argumenta que o fraco desempenho do EFS em comparação com outras estruturas é frequentemente devido ao EntityConnection objeto sendo criado cada vez que um novo EntityContext objeto é necessário.
Para testar isso, criei manualmente uma entidade estática em Global.asax.cs Application_start ().
Eu então converti todo o meu contexto usando declarações para
using( MyObjContext currContext = new MyObjeContext(globalStaticEFConnection)
{
....
}
Isso parece ter acelerado um pouco sem erros, até onde posso dizer.
Mas isso é seguro?
Usando um aplicativo em toda a estática EntityConnection introduzir condições de raça?
Atenciosamente, Kervin
Solução
EntityConnection está documentado para não ser seguro. Eu acho que você poderia reuni -los, mas não pode usar uma conexão estática única para um aplicativo da Web, pois haverá muitos threads envolvidos.
Outras dicas
Se o seu contexto de EF estiver em todo
No meu projeto, fiz uma intença por WebRequest do contexto da EF - ou seja. Um objeto de contexto é estático desde o início até o final de uma solicitação da web e todas as operações nesse pedido funcionam com o mesmo contexto de EF. Isso acelerou significativamente meu processamento sem o problema mencionado acima.
Uma maneira de implementar isso é usar um contêiner DI (estou usando o Unity) para gerenciar a vida útil do contexto da EF. O gerente da Lifetime de solicitação da Web não é entregue fora da caixa em unidade, mas existem toneladas de artigos por aí que mostram como isso pode ser feito.
Hth.