[asp.net]请求通过实体框架数据时发生错误

发布时间: 2017/3/26 5:08:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我建立一个 N 层应用程序已发送 JSON 数据,读取 SQL Server 2012 通过实体框架。

当我尝试请求的用户集合吧"发生错误"的页面。它可以使用硬编码的数据。

这是我的代码︰

public IEnumerable<User> Get()
{
    IUserManager userManager = new UserManager();
    return userManager.GetUsers();
}


public IEnumerable<User> GetUsers()
{
    return repo.ReadUsers();
}

public IEnumerable<User> ReadUsers()
{
    IEnumerable<User> users = ctx.Users.ToList();
    return users;
}

"环磷酰胺"是对 DbContext 对象的引用。

编辑︰ 这部作品︰

public IEnumerable<User> Get()
{
    IList<User> users = new List<User>();
    users.Add(new User() { FirstName = "TestPerson1" });
    users.Add(new User() { FirstName = "TestPerson2" });

    return users;
}

浏览器屏幕截图︰ http://i.imgur.com/zqG0qe0.png

编辑︰ 充满错误 (截图)︰ http://i.imgur.com/dt48tRG.png

在此先感谢。

解决方法 1:

如果您的网站返回内部错误和没有调用堆栈你没有看到完整的异常 (这使得它很难确切地指出你的问题)。
所以首先去与调用堆栈的实际异常你有 2 种方法。

  • 调试网站︰ 启动本地的网站或将调试器附加到本地运行的网站。而当它击中的异常,你会看到异常的详细信息,然后,逐句通过代码,调试器将停止。
  • 禁用自定义错误︰ IIS 想要保护你内部的运作,所以标准的行为是不显示完整的异常。要禁用此行为编辑你 web.config 并将 xml 节点下添加

之后你得到实际的异常请更新您的问题与调用堆栈和真正的内部服务器错误。我的猜测是你有一个序列化的问题,也许某种形式的循环引用。你修复将要么使简易 viewModel (并不直接返回实体) 或添加序列化设置 (json.net 支持循环引用的示例)。

编辑
作为怀疑序列化会给你很难。原因是采用了延迟加载的创建代理。 您可以禁用代理创建与下面的代码 (请注意,这也将禁用延迟加载)。

public IEnumerable<User> ReadUsers()
{
    ctx.Configuration.ProxyCreationEnabled = false;
    IEnumerable<User> users = ctx.Users.ToList();
    return users;
}

如果是这样的话你可以考虑禁用上下文初始化期间创建代理。

官方微信
官方QQ群
31647020