2014-05-12 85 views
1

我有一個像下面的操作:值當映射在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中的值。

我不是我做錯了什麼。請指向正確的方向。

回答

2

當你映射目的地User對象的

var model = Mapper.Map<User>(updateUser); 

然後新的實例被創建,並從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更新。

注意:最好在應用程序啓動時創建一次映射。

+0

Downvoter,你能解釋downvote的原因嗎?如果這個解決方案有什麼問題,我會很樂意聽到評論 –

+1

@Downvoter完全正確的答案,我沒有看到downvote的理由。 – lbrahim