asp.net-mvc-4 - Asp.Net Json-Call 中带有 using 子句的 Dbcontext

标签 asp.net-mvc-4 entity-framework-4 dbcontext jsonresult

使用以下 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/

相关文章:

javascript - Asp.Net MVC 中相同属性的编辑器和下拉列表

sql - 如何从 SQL Server 2008 R2 获取数据和数据库并上传到 Azure

c# - LINQ Join从多个表中删除内容

c# - Entity Framework 4 SaveChanges 内存不足

c# - 如何使用 LINQ 动态查询不同的表?

asp.net-mvc - 在 MVC4.0 中使用分页实现类别/子类别的更好选择是什么?

c# - 如何摆脱 'property could not be set to a double value, you must set this property to a non-null value of type decimal'

c# - 包含相同对象列表的对象的 Entity Framework 映射

asp.net-mvc - 如何从 MVC 业务对象中引用 Entity Framework DbContext?

entity-framework - Entity Framework 5 - 保存更改后立即刷新 DbContext