【问题标题】:MVC application throws ObjectDisposedException eventhough I used ToList() method即使我使用了 ToList() 方法,MVC 应用程序也会抛出 ObjectDisposedException
【发布时间】:2016-03-11 14:47:19
【问题描述】:

我正在编写 MVC Web 应用程序,但我遇到了一个问题。

尽管我在 dbContext 仍处于打开状态时使用了 ToList() 方法,但应用程序仍会引发 ObjectDisposedException。这是我的代码:

数据访问层:

        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&lt;CompanyCode&gt; 为模型的视图,响应很好并且没有错误。

谁能解释一下这是怎么回事?

【问题讨论】:

  • 没有显示控制器逻辑是如何工作的。通过更改为强类型,您要求 MVC Binder 提供它所做的强类型。所以它是用活页夹知道的值更新类型的活页夹。这是第一次获取还是第一次发帖?
  • 请显示 CompanyCode 的代码及其映射。这可能是延迟加载问题。

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


【解决方案1】:

我认为您尚未创建 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();
}

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2019-09-05
    • 2013-02-06
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多