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.

Foi útil?

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top