You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core Web API HttpGet三级关联表查询嵌套子集合为空问题

需修改的内容如下

1. 调整查询逻辑,加载多级关联数据

你当前的查询仅通过Include加载了Sectors下的Centers导航属性,没有加载Centers关联的Mangments集合,因此返回结果中该字段均为空。同时原异步方法未使用await调用异步查询方法,需同步修正:

[HttpGet]
public async Task<ActionResult<IEnumerable<Sectors>>> GetSectors()
{
    return await _context.Sectors
        .OrderBy(c => c.name)
        .Include(c => c.Centers)
            .ThenInclude(c => c.Mangments) // 新增该行,加载Centers下属的Mangments集合
        .ToListAsync();
}

2. 修正实体类的反向导航属性

Mangments类中你注释的反向导航属性类型错误,会影响EF Core的关系映射,建议补全正确配置:

public class Mangments
{
    [Key]
    public Int32 ID { get; set; }
    public string cod { get; set; }
    public string name { get; set; }
    public double? mang { get; set; }
    [ForeignKey("CenterID")]
    public virtual Centers Center { get; set; } // 修正为Centers类型,替换原错误的Sectors类型
    public Int32 CenterID { get; set; }
}

3. 配置JSON序列化避免循环引用错误

补全导航属性后,序列化时会出现对象循环引用的问题,需在项目启动配置中添加如下配置:
如果你使用系统自带的System.Text.Json序列化(.NET 6+默认),在Program.cs中修改:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles;
    });

如果你使用Newtonsoft.Json序列化,修改为:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    });

完成以上修改后即可返回符合预期的三层嵌套JSON结构。

内容的提问来源于stack exchange,提问作者Noura Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:18:02