由于已处理DbContext,操作无法完成。要返回选择的表值

由于已处理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'来访问它。请原谅我的英语。

+0

你回来'result'变量自IEnumerable继承似乎并没有持有价值,而是准备操作,它不再可以通过它指向的'DbContext'来执行,因为'DbContext'在调用'return'后就会被处理掉,这发生在.NET试图将'result'串行化成JSON之前。改变你的行'var result = db.Set(tableType);''var result = db.Set(tableType).ToListAsync();' –

+0

给我错误: - ObjectContext实例已经被处置,不能再使用用于需要连接的操作。 – Deepak

+0

尝试'result = db.Set ();' –

db.Set(tableType); 

不是集合。这是一个查询。如果要执行查询,然后运行

 var results = new List<object>(); 
     foreach (var item in db.Set(tableType)) 
     { 
      results.Add(item); 
     } 
+0

它返回: - dbset不包含'tolist'的定义,并且没有扩展方法'ToList'接受可以找到类型'DbSet'的第一个参数。 – Deepak

+0

您是否导入了System.Linq命名空间?这是一种扩展方法。 https://msdn.microsoft.com/en-us/library/bb342261(v=vs.110).aspx –

+0

是的,它已经做到了。 – Deepak

试着这么做:

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 }; 
     } 
    } 
+0

这是什么: - I_DO_KNOW_TYPE_FOR_SET结果?? – Deepak

+0

我的意思是:我不知道类型 –

+0

也许:DbContext结果; –