2012-10-03 10 views
0

我正在使用MVC3与.NET 4.0,当我的创建窗体被调用时,我得到一个ObjectDisposedException说对象已被处置。在此MVC3页的声明异常ocurrs:从LINQ到SQL查询返回后的ObjectDisposedException

@Html.DropDownListFor(model => model.Country, GeneralActivity.GetCountriesMVC("NL")) 

而被调用的方法是这样的:

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; 
} 

在调试我执行到return语句,然后离开,并让我给调用MVC页面上的@Html语句和异常被抛出。

qlist实例声明在USING语句之外,并由LINQ查询初始化,所以我不明白为什么它说对象已被处置。

回答

1

你实际上并没有执行查询 - 所以当你尝试访问qList时,它试图连接回你的数据库,并且连接被关闭。

尝试铸造查询到列表中,以便将存储在内存中:

qlist = (from p in ctx.Countries select new SelectListItem { 
     Text = p.CountryName, 
     Value = p.CountryCodeId, 
     Selected = (p.CountryCodeId == preselectCountryCode) 
    }).ToList();