尽管我使用了ToList()方法,但MVC应用程序抛出了ObjectDisposedException

时间:2016-03-11 14:47:20

标签: c# asp.net asp.net-mvc entity-framework

我正在编写MVC网络应用程序而且我一度陷入困境。

当dbContext仍然打开时,应用程序抛出ObjectDisposedException,尽管我使用了ToList()方法。这是我的代码:

数据访问层:

        public List<CompanyCode> SearchCompanyCodes(int? projectId=null)
    {
        IQueryable<sl_CompanyCodes> filtered=dbContext.sl_CompanyCodes;

        if(projectId!=null)
        {
            filtered = filtered.Where(cc => cc.Project_ID == projectId);
        }

        return filtered.ToList();
    }

业务逻辑层:

        public List<CompanyCode> CompanyCodes(int? cc_projectId=null)
    {
        List<CompanyCode> result;

        using(var repository=new E6Repository())
        {
            result=repository.SearchCompanyCodes(projectId:cc_projectId);
        }
        // E6Repository.Dispose calls dbContext.Dispose()

        return result;
    }

控制器:

        public JsonResult CompanyCodes()
    {
        var logic = new GetDataLogic();

        List<CompanyCode> l = logic.CompanyCodes();

        return Json(l, JsonRequestBehavior.AllowGet);
    }

我不知道该怎么做...当我在控制器中返回动作之前停止调试器时,我可以在立即窗口中输入l时看到填充好的列表(此时通知dbContext已经处理好了)。

有趣的事情:如果我将ActionResult更改为以IEnumerable<CompanyCode>为模型的视图,则响应很好并且没有错误。

任何人都可以向我解释一下发生了什么吗?

1 个答案:

答案 0 :(得分:0)

我认为您尚未创建EF上下文的实例。试试这个:

public List<CompanyCode> SearchCompanyCodes(int? projectId=null)
{
    using (var context = new dbContext())
    {
        IQueryable<sl_CompanyCodes> filtered = from compCodes in dbContext.sl_CompanyCodes
                                               select compCodes;
    }

        if(projectId!=null)
        {
            filtered = filtered.Where(cc => cc.Project_ID == projectId);
        }

    return filtered.ToList();
}