2012-06-11 6 views
5

Ich erstelle eine Automapper-Zuordnung zwischen meinem AccountEditViewModel (View-Modell für die Bearbeitung eines Benutzers) und meinem User (Datenmodell für einen Benutzer in der Datenbank). Wenn das Passwortfeld ausgefüllt ist, möchte ich dieses Passwort verschlüsseln und es speichern, wenn es jedoch null ist, möchte ich das alte Passwort behalten. Ich habe den Code unten versucht, aber es ist falsch, model.Ignore() gibt keinen String-Wert zurück. Was ist der beste Weg, dies zu tun? Kann ich dies mit der Methode ForMember() erreichen oder benötige ich einen benutzerdefinierten Resolver?C# Automapper Ignore-Eigenschaft Wenn Null

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

Antwort

8

Try this:

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

        }); 
+1

Sie benötigen einen ForMember hinzufügen (Modell => model.Password, Modell => model.Ignore()), bevor der AfterMap() aufrufen, der Mapper ist nicht mehr Umgang mit dem Mapping –

+0

Dies funktioniert nicht, wenn Sie LinQ-Ausdrücke des Auto-Mappers verwenden. – AgentFire