C# 带有实体框架6的Web API 2控制器,包括
我创建了一个Web API来连接和更新SQL Server中的数据,使用 实体框架6(数据库优先) 我注意到,当我为表格生成控制器时,C# 带有实体框架6的Web API 2控制器,包括,c#,sql-server,controller,entity-framework-6,webapi,C#,Sql Server,Controller,Entity Framework 6,Webapi,我创建了一个Web API来连接和更新SQL Server中的数据,使用 实体框架6(数据库优先) 我注意到,当我为表格生成控制器时,Get函数只返回表格行,不包括子行 我可以使用System.Data.Entity.Include扩展方法修复这个问题 然而,当我做了一个简单的测试来检索表行及其关联的子行时,我得到了响应 状态代码:500,原因短语:“内部服务器错误” 我的代码如下: // GET: api/Fields/5 [ResponseType(typeof(Field))] publi
Get
函数只返回表格行,不包括子行
我可以使用System.Data.Entity.Include
扩展方法修复这个问题
然而,当我做了一个简单的测试来检索表行及其关联的子行时,我得到了响应
状态代码:500,原因短语:“内部服务器错误”
我的代码如下:
// GET: api/Fields/5
[ResponseType(typeof(Field))]
public async Task<IHttpActionResult> GetField(Guid id)
{
Field field = await db.Fields.Include(x=>x.Layers).FirstOrDefaultAsync(i => i.FieldKey == id);
if (field == null)
{
return NotFound();
}
return Ok(field);
}
我找到了原因
这是因为默认的JSON序列化程序无法正确序列化实体之间的任何循环引用
答案是
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
在
公共静态类WebApiConfig
{
公共静态无效寄存器(HttpConfiguration配置)
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);