在响应中包含相关字段

问题描述 投票:0回答:1

我正在使用实体框架 - 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}
c# .net entity-framework
1个回答
0
投票

在响应中包含相关字段

我正在使用实体框架 - 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 对象,这会产生所需的结果集。

输出样本:

因此,根据您的期望,我认为您正在寻找此输出。

© www.soinside.com 2019 - 2024. All rights reserved.