我正在使用实体框架 - v8。 我需要返回用户作为响应,并附上评论。
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":"[email protected]","address":null}
在响应中包含相关字段
我正在使用实体框架 - v8。我需要将用户返回为 回复,并附上评论。
嗯,根据您的情况,您应该随注释一起返回 DTO,或者您可以启用延迟加载。但使用 DTO 肯定会为您提供更大的灵活性。因为用户和评论都代表所需的响应结构。
假设您有以下 DTO:
Public class UserWithCommentsDTO
{
public Guid Id { get; set; }
public string FullName { get; set; }
public string Email { get; set; }
public List<Comment> Comments { get; set; }
}
在这种情况下,您可以修改代码如下:
app.MapGet("data", async (MyBoardsContext db) =>
{
var user = await db.Users
.Include(u => u.Comments)
.FirstOrDefaultAsync(user => user.Id == Guid.Parse("68366dbe-0809-490f-cc1d-08da10ab0e61"));
if (user == null)
{
return NotFound();
}
var userWithCommentsDTO = new UserWithCommentsDTO
{
Id = user.Id,
FullName = user.FullName,
Email = user.Email,
Comments = user.Comments.ToList()
};
return userWithCommentsDTO;
});
注意: 在创建 UserWithCommentsDto 时,我正在映射用户属性,然后使用 Select 为每个包含的评论创建 CommentDto 对象,这会产生所需的结果集。
输出样本:
因此,根据您的期望,我认为您正在寻找此输出。