【发布时间】: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<CompanyCode> 为模型的视图,响应很好并且没有错误。
谁能解释一下这是怎么回事?
【问题讨论】:
-
没有显示控制器逻辑是如何工作的。通过更改为强类型,您要求 MVC Binder 提供它所做的强类型。所以它是用活页夹知道的值更新类型的活页夹。这是第一次获取还是第一次发帖?
-
请显示 CompanyCode 的代码及其映射。这可能是延迟加载问题。
标签: c# asp.net asp.net-mvc entity-framework