1
resposta

Padrão DDD com EnitityFrameWork

Boa tarde. Tenho uma duvida referente ao padrão de projeto DDD com Entity, em muitas materias ou forums referente a performace entity framework, diz que é melhor usar o context dentro de um bloco using. No Padrão de Projeto DDD, o contexto é instanciado no repositório com protected, onde os repositórios especializados usaram esse contexto.

Tenho um projeto onde tenho um serviço windows que usa esse repositório, tenho impressão que as consultas realizadas vão ficando em memória, onde em algum momento talvez uns 3 ou 4 dias de uso, da algum problema, devido a nunca ter um dispose para limpar o contexto. quando reinicio o serviço novamente, tudo normaliza. já tentei usar o using com projeto em padrao DDD, mas não deu certo, nas consultas diz que o contexto esta fechado em alguns momentos. Como devo fazer?

1 resposta

Oi Lauro, tudo bem?

Existe uma discussão antiga, sobre ser necessário ou não um Dispose() após usar os dados do contexto: http://blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext/

A conclusão tirada do artigo acima é que, em muitos casos do mundo real, é inofensivo deixar de chamar Dispose() no contexto do EF após usá-lo, pois cada vez que você chama o método SaveChanges() a conexão com o SQL Server é aberta e, após a execução da query, ela é sempre fechada. Então não restam conexões abertas, mesmo sem fazermos o Dispose().

Sobre o caso de "vazamento de memória" que você relatou, talvez seja o caso de fazer o dispose em outros recursos que você possa estar utilizando, como comandos, transações, etc., mas aí teríamos que dar uma olhada no código, se você quiser.