【问题标题】:Web API 2 Controller with Entity Framework 6 with IncludeWeb API 2 控制器与实体框架 6 与包含
【发布时间】:2020-02-12 09:49:34
【问题描述】:

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

我注意到当我为我的表生成控制器时,Get<XXX> 函数只返回表行而不包括子行。

我可以使用System.Data.Entity.Include 扩展方法解决这个问题吗?

但是,当我做了一个简单的测试来检索表行及其关联的子行时,我得到了响应

StatusCode:500,ReasonPhrase:“内部服务器错误”,

我的代码如下:

// 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);
}

如果我使用没有包含的原始生成代码,它可以正常工作。

我在 DbContext 构造函数中禁用了延迟加载和代理:

 this.Configuration.LazyLoadingEnabled = false;
 this.Configuration.ProxyCreationEnabled = false;

【问题讨论】:

    标签: c# sql-server controller entity-framework-6 webapi


    【解决方案1】:

    我找到了原因 这是因为默认的 JSON 序列化器无法正确序列化实体之间的任何循环引用

    答案是放

     var json = config.Formatters.JsonFormatter;
            json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
            config.Formatters.Remove(config.Formatters.XmlFormatter);
    

    公共静态类 WebApiConfig { public static void Register(HttpConfiguration config)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多