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

EF Core 8查询用户关联评论返回时不显示问题求助

问题描述

使用Entity Framework Core 8编写API接口,需要返回包含关联评论的用户数据,接口代码如下:

app.MapGet("data", async (MyBoardsContext db) =>
{
    var user = await db.Users
                       .Include(u => u.Comments)
                       .FirstAsync(user => user.Id == Guid.Parse("68366dbe-0809-490f-cc1d-08da10ab0e61"));
    
    return user;
});

调试模式下能看到用户关联了8条评论,但Swagger/Postman返回的响应中没有评论数据:

{
    "id": "68366dbe-0809-490f-cc1d-08da10ab0e61",
    "fullName": "Lola Hauck",
    "email": "Lola90@yahoo.com",
    "address": null
}

User实体类定义:

namespace EntityApp.Entities
{
    public class User
    {
        public Guid Id{get;set;}
        public string FullName { get; set; }
        public string Email { get; set; }
        public Address Address{get;set;}
        public List<WorkItem> WorkItems = new List<WorkItem>();
        public List<Comment> Comments = new List<Comment>();
    }
}
问题原因

User类中的Comments和WorkItems是字段,而非带get/set访问器的属性。默认情况下,.NET内置的JSON序列化器只会序列化属性,不会序列化字段,因此即使EF Core已经加载了关联的评论数据,返回时也不会被序列化输出。

解决方法

方法一:将字段改为自动属性(推荐)

把Comments和WorkItems修改为带get/set的自动属性,这也是EF Core推荐的实体导航属性定义方式:

namespace EntityApp.Entities
{
    public class User
    {
        public Guid Id{get;set;}
        public string FullName { get; set; }
        public string Email { get; set; }
        public Address Address{get;set;}
        public List<WorkItem> WorkItems { get; set; } = new List<WorkItem>();
        public List<Comment> Comments { get; set; } = new List<Comment>();
    }
}

方法二:配置JSON序列化器包含字段(不推荐)

如果因特殊原因无法修改实体类,可以配置JSON序列化器允许序列化字段。在Program.cs中添加如下配置:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IncludeFields = true;
    });

注意:这种方式仅解决序列化问题,但EF Core对字段作为导航属性的支持有限,优先推荐方法一。

内容的提问来源于stack exchange,提问作者Panda-313

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:33:19