【发布时间】: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