EF 6,从 DTO 更新实体,但仅限现有属性(通用代码)
EF 6, Update Entity from DTO, but only existing properties (generic code)
我想知道更新从数据库中检索到的实体的最佳方法。
前端请求更新实体,发送包含实体 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# 中最受欢迎的选择是使用 AutoMapper,http://automapper.org/
Person person = Mapper.Map<Person>(pDTO);
我想知道更新从数据库中检索到的实体的最佳方法。 前端请求更新实体,发送包含实体 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# 中最受欢迎的选择是使用 AutoMapper,http://automapper.org/
Person person = Mapper.Map<Person>(pDTO);