【问题标题】:EF 6, Update Entity from DTO, but only existing properties (generic code)EF 6,从 DTO 更新实体,但只有现有属性(通用代码)
【发布时间】:2020-05-08 09:19:21
【问题描述】:

我想知道更新从数据库中检索到的实体的最佳方式。 前端请求更新实体,发送包含实体 id 以及一些字段的 DTO。 然后有了这个Id,我在DB中寻找实体,问题来了:

我想更新在 DTO 中设置的实体的字段,并保留其他字段。 显然,我可以逐个字段地明确地做到这一点,但我想知道一种最佳实践,以通用方式对 DTO 的所有属性进行操作。

代码如下:

[HttpPut]
public IActionResult Put([FromBody]PersonDTO pDTO) {
   Person p = GetPersonById(pDTo.IdPerson);
   p.Name = pDTO.Name;
   p.Address = pDTO.Address;
   // and 100 more fields
   _context.SaveChanges();
}

如何避免 DTO 和模型之间的映射?我虽然想使用反射,但我不知道是否有更好、更优雅和标准的方法来做到这一点。

谢谢

【问题讨论】:

    标签: c# asp.net-core entity-framework-6 dto


    【解决方案1】:

    我认为在 c# 中映射对象时最流行的选择是使用 AutoMapper,http://automapper.org/

    Person person = Mapper.Map<Person>(pDTO);
    

    【讨论】:

    • 谢谢。但是当我像这样映射时,我有 2 个“Person”实例:1)你显示的那个 2)从 DB 中检索到的那个(因为 pDTO 是 Person 字段的子集)
    • 那么你应该使用Person p = GetPersonById(pDTo.IdPerson); Mapper.Map(pDTO, p);
    • @AdamStawarek 您的最后一条评论就是我的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多