由于已处理DbContext,操作无法完成。要返回选择的表值
问题描述:
我的控制器代码是: -由于已处理DbContext,操作无法完成。要返回选择的表值
public JsonResult FetchTblData()
{
string MyTableName = Convert.ToString(Request.Form["TblName"]);
using (EBContext db = new EBContext())
{
try
{
Type tableType = typeof(CourseDesc);
switch (MyTableName)
{
case "CourseTbl":
tableType = typeof(CourseTbl);
break;
case "CourseDescTbl":
tableType = typeof(CourseDesc);
break;
}
var result = db.Set(tableType);
return new JsonResult { Data = result, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
catch (Exception ex)
{
string innerMessage = (ex.InnerException != null) ? ex.InnerException.Message : "";
return new JsonResult { Data = "Not Found", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
}
}
我看着在这个问题还有: - [操作无法完成,因为的DbContext已配置] [1]
[1]:The operation cannot be completed because the DbContext has been disposed等,但方法是完全不同的。我想在我的jsonresult中有我的表值。但我无法通过变量'result'来访问它。请原谅我的英语。
答
db.Set(tableType);
不是集合。这是一个查询。如果要执行查询,然后运行
var results = new List<object>();
foreach (var item in db.Set(tableType))
{
results.Add(item);
}
答
试着这么做:
public JsonResult FetchTblData()
{
string MyTableName = Convert.ToString(Request.Form["TblName"]);
DbContext result;
try
{
Type tableType = typeof(CourseDesc);
switch (MyTableName)
{
case "CourseTbl":
tableType = typeof(CourseTbl);
break;
case "CourseDescTbl":
tableType = typeof(CourseDesc);
break;
}
using (EBContext db = new EBContext())
{
result = db.Set(tableType);
}
return new JsonResult { Data = result, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
catch (Exception ex)
{
string innerMessage = (ex.InnerException != null) ? ex.InnerException.Message : "";
return new JsonResult { Data = "Not Found", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
}
你回来'result'变量自IEnumerable继承似乎并没有持有价值,而是准备操作,它不再可以通过它指向的'DbContext'来执行,因为'DbContext'在调用'return'后就会被处理掉,这发生在.NET试图将'result'串行化成JSON之前。改变你的行'var result = db.Set(tableType);''var result = db.Set(tableType).ToListAsync();' –
给我错误: - ObjectContext实例已经被处置,不能再使用用于需要连接的操作。 – Deepak
尝试'result = db.Set();' –