在AutoMapper中映射时不包括值



我有如下操作:

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的数据来更新它。

注意:最好在应用程序启动时创建一次映射。

最新更新