使用以下 Controller 方法从本地开发服务器切换到本地 IIS 服务器 (ASP.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 子句在 return 语句之后结束)。 (注意:由于某种原因,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);
}
在这两种情况下,这都是使用 block :
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()
将 entries
读取到内存中,然后再将其传递给 Json()
:
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);
}
关于asp.net-mvc-4 - Asp.Net Json-Call 中带有 using 子句的 Dbcontext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16214085/