2012-06-11 39 views
5

我在我的AccountEditViewModel(用於編輯用戶的視圖模型)和我的User(表示數據庫中的用戶的數據模型)之間創建了一個Automapper映射。如果填寫了密碼字段,我想加密該密碼並將其存儲,但是如果它是空的,我想保留舊密碼。我試過下面的代碼,但它是錯誤的,model.Ignore()不返回字符串值。什麼是最好的方式去做這件事。我可以使用ForMember()方法完成此操作還是需要自定義解析器?C#自動映射器忽略屬性當爲空

Mapper.CreateMap<AccountEditViewModel, User>() 
       .ForMember(model => model.Password, model => model.MapFrom(user => user.Password != null ? EncryptPassword(user.Password) : model.Ignore())); 

回答

8

試試這個:

Mapper.CreateMap<AccountEditViewModel, User>() 
.ForMember(model => model.Password, model => model.Ignore()) 
.AfterMap((src, dst) => 
        { 
         if (src.Password != null) 
          dst.Password= EncryptPassword(src.Password); 

        }); 
+1

您需要添加一個ForMember(型號=> model.Password,型號=> model.Ignore())前AfterMap()調用映射器不再處理映射 –

+0

當您使用自動映射器的LinQ表達式時,這不起作用。 – AgentFire