我有如下操作:
public JsonResult Update(UpdateUserViewModel updateUser)
{
try
{
var existUser = _uow.Users.GetById(updateUser.UserId);
AutoMapper.Mapper.CreateMap<UpdateUserViewModel,User>();
var model = AutoMapper.Mapper.Map<User>(updateUser);
_uow.Users.UpdateEntity(model);
_uow.Save();
return Json(new { Result = "OK" }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { Result = "ERROR", Message = ex.Message }, JsonRequestBehavior.AllowGet);
}
}
UpdateUserViewModel
不具有Password
属性,但User
具有,并且它正在existUser
中填充。所得到的model
包括Password
属性,但不包括existUser
中的值。
我没有做错什么。请给我指正确的方向。
使用进行映射时
var model = Mapper.Map<User>(updateUser);
然后创建目标User
对象的新实例,并用来自updateUser
的数据填充该实例。您应该将源对象映射到现有对象:
var existUser = _uow.Users.GetById(updateUser.UserId);
var model = Mapper.Map(updateUser, existUser);
// you even don't need model here
// just call Mapper.Map(updateUser, existUser) and use existUser
因此,AutoMapper
将使用User
的现有实例,并且它将用来自UpdateUserViewModel
的数据来更新它。
注意:最好在应用程序启动时创建一次映射。