Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#当为Null时自动映射忽略属性_C#_.net_Asp.net Mvc_Automapper - Fatal编程技术网

C#当为Null时自动映射忽略属性

C#当为Null时自动映射忽略属性,c#,.net,asp.net-mvc,automapper,C#,.net,Asp.net Mvc,Automapper,我正在我的AccountEditViewModel(用于编辑用户的视图模型)和我的用户(表示数据库中用户的数据模型)之间创建自动映射。如果填写了密码字段,我想对该密码进行加密并将其存储,但是如果该密码为空,我想保留旧密码。我尝试了下面的代码,但它是错误的,model.Ignore()不返回字符串值。最好的办法是什么。我可以使用ForMember()方法完成这项工作,还是需要自定义解析器 Mapper.CreateMap<AccountEditViewModel, User>()

我正在我的
AccountEditViewModel
(用于编辑用户的视图模型)和我的
用户
(表示数据库中用户的数据模型)之间创建自动映射。如果填写了密码字段,我想对该密码进行加密并将其存储,但是如果该密码为空,我想保留旧密码。我尝试了下面的代码,但它是错误的,model.Ignore()不返回字符串值。最好的办法是什么。我可以使用
ForMember()
方法完成这项工作,还是需要自定义解析器

Mapper.CreateMap<AccountEditViewModel, User>()
                .ForMember(model => model.Password, model => model.MapFrom(user => user.Password != null ? EncryptPassword(user.Password) : model.Ignore()));
Mapper.CreateMap()
.ForMember(model=>model.Password,model=>model.MapFrom(user=>user.Password!=null?EncryptPassword(user.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);

                    });
Mapper.CreateMap()
.ForMember(model=>model.Password,model=>model.Ignore())
.AfterMap((src,dst)=>
{
如果(src.Password!=null)
dst.Password=加密密码(src.Password);
});

在AfterMap()调用之前,您需要添加一个FormMember(model=>model.Password,model=>model.Ignore())映射程序不再处理映射这在使用automapper的LinQ表达式时不起作用。类似问题和