仅返回子对象ID的简单方法

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

我在 ASP.net core 中有一个 webapi 项目。我包含了控制器和我想要返回的对象。问题是,这个对象可以有很多子对象,而这些子对象又可以有很多子对象。为了让事情易于管理,我只想返回孩子们的 ID。

我能想到的唯一解决方案是制作一个“中间”对象。该对象可以从数据库对象填充/被填充到数据库对象。但我可以想象,当 API 增长时,这会变得相当麻烦。此外,当添加字段但忘记填充时,它很容易出错。

是否可以制作类似属性的东西来确保只返回子项的 Id?


    [ApiController]
    [Route("[controller]")]
    public class ProjectItemsController : ControllerBase
    {
        [HttpGet]
        [Route("GetById")]
        public async Task<ActionResult<MyItem>> GetById(int id)
        {
            MyItem? item = await _context.FindAsync<MyItem>(id);
            if (item == null)
                return NotFound();
            return Ok(item);
        }
    }

public class ProjectItem
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; } = "";
    public DateTime Created { get; set; }
    public virtual User? CreatedByUser { get; set; }
    public virtual ICollection<ProjectItem> Children { get; } = new List<ProjectItem>();
    public virtual ProjectItem? Parent { get; set; }
}

编辑:为了避免混淆,我希望以此作为回复

获取ID/1

{
  "id": 1,
  "title": "string",
  "created": "2023-09-20T19:51:04.524Z",
  "createdByUser": {
    "id": 0,
    "keycloakId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "userName": "string",
    "email": "string"
  },
  "children": [
    { "id": 2} ,
    { "id": 3}
  ],
  "parent": { "id": 4}
}
c# entity-framework asp.net-web-api
1个回答
0
投票

如果这是您的永久功能,您只返回子记录的 ID,请创建相应的模型

public class ProjectItemLimited
{
    [Key]
    public int Id { get; set; }
    public virtual ICollection<ProjectItemLimited> Children { get; set; }
    public virtual ProjectItemLimited? Parent { get; set; }
}

对于需要所有数据的路线,使用不同的模型/数据库上下文。

万一我误解了,你真正需要的是 API 数据的有限暴露......在这种情况下,你可以保留数据库上下文的原始模型并创建这个有限的模型,并使用像 AutoMapper 这样的工具来补充你的数据。 JSON 响应的模型。

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