AutoMapper中映射时不包含的值

时间:2014-05-12 10:57:06

标签: asp.net-mvc 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属性,但不包含{{1}}中的值。

我不是我做错了什么。请指出正确的方向。

1 个答案:

答案 0 :(得分:2)

使用

进行地图绘制时
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中的数据对其进行更新。

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