【问题标题】:How to update a nested list of objects using automapper如何使用自动映射器更新嵌套的对象列表
【发布时间】:2018-01-16 11:25:59
【问题描述】:

问题

我想在更新 Ameneties 时更新嵌套的 Cabins 列表,但是目前如果有任何 Cabins 进入当前控制器,它们会简单地添加到现有列表中,每个都有一个新的 ID。

我现在能想到的唯一方法是忽略映射器中从资源到对象的 IList,并在单独的 API 调用中更新小屋。

这听起来确实像是额外的性能负载,所以我想知道我是否遗漏了一些东西,您可以通过正确的自动映射器调整从 amenties 控制器执行此操作。

有没有人遇到过类似的情况?非常感谢您的帮助,谢谢。

型号

public class Amenety
{
    public int Id { get; set; }
    public IList<Cabin> Cabins { get; set; }
}

public class Cabin
{
    public int Id { get; set; }

    public string Name{ get; set; }

    public Amenety Amenety { get; set; }
    public int? AmenetyId { get; set; }
}

资源

public class AmenetyResource
{
    public int Id { get; set; }
    public IList<CabinResource> Cabins { get; set; }
}

public class CabinResource
{
    public int Id { get; set; }
    public string Name{ get; set; }
    public int AmenetyId { get; set; }
}

控制器

    [HttpPut()]
    public async Task<IActionResult> Update([FromBody] AmenetyResource dto)
    {
        var entity = await _repository.GetEntityWhere(i => i.Id == dto.Id);

        if (entity == null)
            return NotFound();

        _mapper.Map(dto, entity);

        await _unitOfWork.CompleteAsync();

        var resource = _mapper.Map<Amenety, AmenetyResource>(entity);


        return Ok(resource);
    }

映射

 //to resource
 CreateMap<Amenety, AmenetyResource>();
 CreateMap<Cabin, CabinResource>();

 //from resource
 CreateMap<CabinResource, Cabin>().ForMember(t=>t.Id, opt => opt.Ignore());
 CreateMap<AmenetyResource, Amenety>().ForMember(t => t.Id, opt => opt.Ignore());

【问题讨论】:

    标签: c# dns automapper


    【解决方案1】:

    因此,在睡了 10 分钟并喝了两杯咖啡之后,很明显,我需要将客舱包括在我对控制器内部设施的调用中,以便使用该列表。

    var entity = await _repository.GetEntityInclude(i => i.Id == dto.Id, c => c.Cabins);
    

    因此控制器更改为这个并且现在可以正常工作,但是您必须确保提供您现在想要在那里的完整新的小屋列表,因为在更新期间所有旧的都将被删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多