在Asp中使用using子句来创建上下文.净Json-Call



我在从本地开发服务器切换到本地IIS服务器(ASP. js)时遇到了一个问题。. NET MVC4)使用以下控制器方法:

  public JsonResult GetJsonData(string Context, string Language)  
    {
       using (KeyValueDBContext db = new KeyValueDBContext())
       {
            var entries = from u in db.KeyValues
                          where ((u.Context == Context) && (u.Language == Language))
                          select u;
            return Json(entries, JsonRequestBehavior.AllowGet);
      }
   }

使用本地服务器,当从Javascript调用该方法时,我收到了数据,没有问题。该方法从数据库存储库检索基本的键值对集合,并将它们发送到客户机)。切换到IIS后,我得到一个异常,告诉我dbcontext已经被处理了(尽管using子句在返回语句之后结束)。(注意:Visual Studio也无法找到JSONSerializer.cs出于某种原因,但只有当错误发生时)。切换到以下版本完全解决了问题:

public JsonResult GetJsonData(string Context, string Language)   
    {
        KeyValueDBContext db = new KeyValueDBContext();
        var entries = from u in db.KeyValues
                     where ((u.Context == Context) && (u.Language == Language))
                     select u;
        return Json(entries, JsonRequestBehavior.AllowGet);
   }

在这两种情况下,这都是using块:

  using System;
  using System.Collections.Generic;
  using System.Data;
  using System.Data.Entity;
  using System.Linq;
  using System.Web;
  using System.Web.Mvc;
  using beepov4.Models; // project-models

我的问题:这是一个可接受的方式来使用dbcontext json调用的目的(并删除using子句),或者有一个特殊的缺点或隐藏的问题,我应该意识到?

尝试在将entries.ToList()传递给Json()之前将entries读入内存:

using (KeyValueDBContext db = new KeyValueDBContext())
{
        var entries = from u in db.KeyValues
                      where ((u.Context == Context) && (u.Language == Language))
                      select u;
        return Json(entries.ToList(), JsonRequestBehavior.AllowGet);
}

最新更新