我正在编写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>
为模型的视图,则响应很好并且没有错误。
任何人都可以向我解释一下发生了什么吗?
答案 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();
}