Inquiridor
Dispose no ObjectContext

Pergunta
-
Galera, gostaria de saber a diferença na utilização nos dois códigos abaixo:
using (myEntities = new MyEntities()) { IQueryable<Produto> iQueryableProduto = myEntities.Produto.AsQueryable<Produto>(); return iQueryableProduto.Where(x => x.Modelo.IdSegmento == idSegmento).OrderBy(x => x.Modelo.Pontos).ToList(); }
e
MyEntities myEntities = new MyEntities(); IQueryable<Produto> iQueryableProduto = myEntities.Produto.AsQueryable<Produto>(); return iQueryableProduto.Where(x => x.Modelo.IdSegmento == idSegmento).OrderBy(x => x.Modelo.Pontos).ToList();
Quando utilizo o primeiro, e tento resgatar uma tabela relacionada a de produtos, ocorre o seguinte erro:
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Gostaria de saber se pode influenciar o desempenho da minha aplicação caso eu não utilize o Dispose().
Obrigado.
Todas as Respostas
-
Boa tarde Eduardo,
quando você chama o método Dispose ele diz ao GC que o objeto está pronto para ser liberado da memória, e a sua vida util na memória é menor, logo, faz sim diferença em não usa-lo
Este (http://www.macoratti.net/vbn5_dpo.htm) artigo do macoratti irá auxilia-lo bem quanto a sua duvida..
Abraços,
Afonso
-
Já tentou
IQueryable<Produto> iQueryableProduto = myEntities.Produto.Include("OUTRA_PROPRIEDADE).AsQueryable<Produto>();
Para você entender, quando você acessa uma propriedade relacionada, o que acontece é uma busca no banco de dados, pois é Lazy Load, isto é, não vai trazer o valor da propriedade até que alguém acesse aquela propriedade requisitando o seu valor. Como você está fazendo um Dispose (utilizando a sintaxe "using"), não existe mais um objeto para acessar o banco. Por isso o erro.
Quando você utiliza o método Include, você pode falar quais outras propriedades você quer que já venham preenchidas, descartando o Lazy Load delas...
Creio que seja isso.
Take a look at WPF FlashMessage
About.me -