表到json错误 - 已经处理了DbContext

时间:2017-03-28 18:55:50

标签: json asp.net-mvc entity-framework

由于某些原因我的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; }
}

2 个答案:

答案 0 :(得分:1)

这是因为您在JSON响应中使用了times,这可能是DbSet或类似的IQueryable对象。您需要在执行数据库查询的JSON响应中使用timelist

答案 1 :(得分:0)

您可能启用了延迟加载和代理生成,并且您的TimeZone对象中包含导航属性。当序列化程序尝试加载依赖项时,上下文已经被释放,这就是你获得异常的原因。

尝试在您的上下文中禁用延迟加载和代理生成。

dc.Configuration.LazyLoadingEnabled=false;
dc.Configuration.ProxyCreationEnabled=false;

编辑: 请尝试返回times而不是timeZonestimesIQueryable,只有在序列化程序尝试返回时才会对其进行评估,但到那时,您的上下文(通过该上下文可能会发生评估)已经处理完毕。