Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dispose do context

Olá... estou com uma dúvida com relação ao Dispose do context, Tenho uma classe RepositórioCliente e no construtor dela eu faço a instancia do context, nesta classe tenho os métodos Salvar() e Pesquisar() e Dispose()

No meu formulário de cadastro de cliente, no envento Load faço a instancia da classe RepositorioCliente RespositorioCliente repCliente = new RepositorioCliente(); //neste momento o meu context também foi instanciado

List oListaCliente = new List(); // esta lista vai receber o resultado da minha pesquisa

Porem tenho um formulário de pesquisa, e para este formulário estou passando como parametro repCliente aonde vou acessar o método Pesquisar() e retornar a lista com os registros encontrados para meu formulário de cadastro de cliente

Meu formulário de cadastro de cliente possue botões de navegaçao para os registros retornados, entao quando edito algum registro e clico no botão salvar estou chamando o metodo Salvar() repCliente.Salvar(objCliente);

A minha dúvida é... neste metodo Salvar, no final do ctx.SaveChanges() eu não posso fazer ctx.Dispose(), pois fazendo isto se navegar para outro registro e tentar salva-lo o sistema retorna um erro dizendo q o DbContext esta como Dispose "The operation cannot be completed because the DbContext has been disposed." Entao a solução que encontrei foi fazer o dispose do context no evento Form_Closing()

repCliente.Dispose(); // aqui vai esta dando o dispose no ctx

Gostaria de saber se eu fizer o dispose do context somente no Form_Closing isto pode dar algum problema ?

Se alguem tiver alguma solução melhor estou aceitando. Obrigado!

2 respostas
solução!

Olá Renan

O problema de manter o contexto aberto por muito tempo é que a aplicação vai gastar mais memória do que o necessário. Enquanto não fazemos o Dispose do Contexto, ele mantem a referência de todas as entidades que foram carregadas. Além disso, quando mantemos o contexto aberto por muito tempo, podemos acabar trabalhando com dados que já foram modificados no banco de produção.

Fora os problemas acima, utilizar um DbContext por formulário é realmente um padrão de desenvolvimento comum com o EntityFramework.

Olá Renan

A sua dúvida foi resolvida?