Automapper版本8.0.0从ResolveUsing
中删除了IMappingExpression
扩展方法,并将其与MapFrom
扩展方法合并。但是,在用ResolveUsing
方法替换MapFrom
之后,某些配置会引发异常。
原始ResolveUsing
:
CreateMap<SourceType, DestinationType>()
.ForMember(dest => dest.Customer,
opt => opt.ResolveUsing(src => src?.Customer ?? new Customer())
);
替换为MapFrom
:
CreateMap<SourceType, DestinationType>()
.ForMember(dest => dest.Customer,
opt => opt.MapFrom(src => src?.Customer ?? new Customer())
);
这会产生编译错误:
错误CS8072
Automapper
表达式树lambda不得包含空传播运算符。
答案 0 :(得分:4)
与旧的/已删除的Func
重载相比,Automapper 8.0.0中新的基于ResolveUsing
的重载接受更多的参数。
在替换opt.MapFrom(src => ...)
时,与其在单个输入参数ResolveUsing
中使用lambda表达式,不如在opt.MapFrom((src, dest) => ...)
中使用2个参数的重载。
MapFrom
表达式变为:
opt => opt.MapFrom((src, dest) => src?.Customer ?? new Customer())
完整示例:
CreateMap<SourceType, DestinationType>()
.ForMember(dest => dest.Customer,
opt => opt.MapFrom((src, dest) => src?.Customer ?? new Customer())
);