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

