2012-06-11 27 views
5

Estoy creando una asignación de Automapper entre mi AccountEditViewModel (Ver modelo utilizado para editar un usuario) y mi User (Modelo de datos que representa un usuario en la base de datos). Si el campo de contraseña está lleno, quiero encriptar esa contraseña y almacenarla; sin embargo, si es nula, quiero conservar la contraseña anterior. He intentado el código a continuación, pero está mal, model.Ignore() no devuelve un valor de cadena. ¿Cuál es la mejor manera de resolver esto? ¿Puedo lograr esto usando el método ForMember() o necesito una resolución personalizada?C# Automapper Ignorar propiedad cuando nulo

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

Respuesta

8

Prueba esto:

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

        }); 
+1

es necesario agregar un ForMember (modelo => model.Password, modelo => model.Ignore()) antes de la AfterMap() llama al asignador ya no es manejo de la asignación –

+0

Esto no funciona cuando se usan expresiones de LinQ del Automapper. – AgentFire

Cuestiones relacionadas