【发布时间】:2012-07-29 22:48:52
【问题描述】:
我目前正在使用实体框架(我知道它还不是最稳定的平台)使用 Database-First 方法开发一个 Web API 项目,但我遇到了一些非常奇怪的事情。
当我的 APIController 中的 GET 方法尝试使用涉及的 LINQ Include() 方法返回 DbSet 中的所有记录时,它将返回 500 错误:
// GET api/Casinos
public IEnumerable<casino> Getcasinos()
{
var casinos = db.casinos.Include(c => c.city).Include(c => c.state);
return casinos.AsEnumerable();
}
然而,这个方法工作正常,并从我的数据库中返回我的数据:
// GET api/States
public IEnumerable<state> Getstates()
{
return db.states.AsEnumerable();
}
所以我已经在其他情况下证明,如果它返回没有 LINQ 查询的实体,效果很好,但是当在 DbContext 上使用 Include 方法时,它会失败。
当然,试图找到这个错误是不可能的,即使使用 Fiddler、Chrome/Firefox 开发工具,并添加 GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
如果有人解决了这个问题,很高兴知道一个好的解决方案,这样我就可以开始返回我的数据了!谢谢!:)
附:我正在使用 SQL Server 2012
【问题讨论】:
-
您可以创建一个自定义的 ExceptionFilterAttribute,您可以注册它以查看错误详细信息。有关示例,请参见 asp.net/web-api/overview/web-api-routing-and-actions/…。
-
你在 fiddler 或 Chrome 中得到了什么,只是一般的 500 页错误?
-
你不能只附加一个调试器来获取根异常吗?否则尝试/捕获整个 get 然后记录/抛出
-
@CuongLe 是的,我只是遇到了一个普遍的例外情况。我通过删除 XML 格式化程序来修复它,但我真的希望我不必这样做,因为我希望它返回 JSON 和 XML,但我想这是一个限制?
标签: asp.net sql linq entity-framework asp.net-web-api