2012-06-11 15 views
5

Sto creando un mapping Automapper tra il mio AccountEditViewModel (Visualizza modello utilizzato per la modifica di un utente) e il mio User (Modello dati che rappresenta un utente nel database). Se il campo della password è compilato, voglio crittografare quella password e memorizzarla tuttavia se è nullo nel Voglio mantenere la vecchia password. Ho provato il codice qui sotto, ma è sbagliato, model.Ignore() non restituisce un valore stringa. Qual è il modo migliore per farlo. Posso farlo usando il metodo ForMember() o ho bisogno di un resolver personalizzato?C# Automapper Ignora proprietà quando Null

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

risposta

8

Prova questo:

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

        }); 
+1

è necessario aggiungere un ForMember (modello => model.Password, modello => model.Ignore()) prima del AfterMap() chiamare il mapper non è più gestione della mappatura –

+0

Questo non funziona quando si usano le espressioni LinQ dell'automaer. – AgentFire

Problemi correlati