C# 带有实体框架6的Web API 2控制器,包括

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

我创建了一个Web API来连接和更新SQL Server中的数据,使用 实体框架6(数据库优先)

我注意到,当我为表格生成控制器时,
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);