由于某些原因我的DBContext无法正常工作,我的控制器上有一个非常简单的操作,我收到此错误The operation cannot be completed because the DbContext has been disposed.
我的简单代码如下,(。toList()仅用于调试confrim正在读取数据,我有102个元素的列表。)
public ActionResult gettimeoffsets()
{
using (Dal.DbContext dc = new Dal.DbContext())
{
var times = dc.timeZones;
var timelist = times.ToList();
return Json(times, JsonRequestBehavior.AllowGet);
}
}
这是我的时区模型
[Table("timeZones")]
public class timeZone
{
[Key]
public String Id { get; set; }
public String BaseUtcOffset { get; set; }
public String DisplayName { get; set; }
public Double tzOffset { get; set; }
}
答案 0 :(得分:1)
这是因为您在JSON响应中使用了times
,这可能是DbSet
或类似的IQueryable
对象。您需要在执行数据库查询的JSON响应中使用timelist
。
答案 1 :(得分:0)
您可能启用了延迟加载和代理生成,并且您的TimeZone
对象中包含导航属性。当序列化程序尝试加载依赖项时,上下文已经被释放,这就是你获得异常的原因。
尝试在您的上下文中禁用延迟加载和代理生成。
dc.Configuration.LazyLoadingEnabled=false;
dc.Configuration.ProxyCreationEnabled=false;
编辑:
请尝试返回times
而不是timeZones
。 times
是IQueryable
,只有在序列化程序尝试返回时才会对其进行评估,但到那时,您的上下文(通过该上下文可能会发生评估)已经处理完毕。