2012-06-11 3 views
5

AccountEditViewModel(ユーザーの編集に使用するビューモデル)とUser(データベース内のユーザーを表すデータモデル)の間のオートマッパマッピングを作成しています。パスワードフィールドが入力されている場合は、そのパスワードを暗号化して保存しますが、古いパスワードを保持したい場合はnullです。私は以下のコードを試してみましたが、間違っています、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

これを試してみてくださいません:あなたはAfterMap()がマッパーを呼び出す前にForMemberを(モデル=> model.Password、モデル=> model.Ignore())を追加する必要があり

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

        }); 
+1

はもはやありマッピングを処理する –

+0

オートマトンのLinQ式を使用する場合、これは機能しません。 – AgentFire

関連する問題