2012-06-11 3 views
5

Я создаю сопоставление Automapper между моим AccountEditViewModel (View Model, используемым для редактирования пользователя) и моим User (модель данных, представляющая пользователя в базе данных). Если поле пароля заполнено, я хочу зашифровать этот пароль и сохранить его, однако, если он равен нулю, я хочу сохранить старый пароль. Я пробовал код ниже, но это неправильно, model.Ignore() не возвращает строковое значение. Каков наилучший способ обойти это. Могу ли я выполнить это с помощью метода ForMember() или мне нужен пользовательский резольвер?C# Automapper Игнорировать свойство Когда Null

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 для automapper. – AgentFire