.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
相关产品推荐
相关产品推荐

