ObjectDisposedException após retornar da consulta LINQ to SQL
-
13-12-2019 - |
Pergunta
Estou usando MVC3 com .NET 4.0 e quando meu formulário de criação é chamado, recebo uma ObjectDisposedException informando que o objeto foi descartado.A exceção ocorre nesta instrução da página MVC3:
@Html.DropDownListFor(model => model.Country, GeneralActivity.GetCountriesMVC("NL"))
E o método invocado é assim:
IEnumerable<SelectListItem> GetCountriesMVC(string preselectCountryCode)
{
... some error checking code omited for simplicity ...
IEnumerable<SelectListItem> qlist;
using (Data.MyDataContext ctx = new Data.MyDataContext()) {
qlist = from p in ctx.Countries select new SelectListItem {
Text = p.CountryName,
Value = p.CountryCodeId,
Selected = (p.CountryCodeId == preselectCountryCode)
};
}
return qlist;
}
Durante a depuração, executo até a instrução return e, em seguida, ela sai e me leva à instrução @Html de invocação na página MVC e a exceção é lançada.
A instância qlist é declarada fora da instrução USING e inicializada pela consulta LINQ, portanto não vejo por que diz que o objeto foi descartado.
Solução
Na verdade, você não está executando a consulta - então, quando você tenta acessar o qList, ele tenta se conectar novamente ao seu banco de dados e a conexão é fechada.
Tente transmitir sua consulta para uma lista para que ela seja armazenada na memória:
qlist = (from p in ctx.Countries select new SelectListItem {
Text = p.CountryName,
Value = p.CountryCodeId,
Selected = (p.CountryCodeId == preselectCountryCode)
}).ToList();