Automapper 8 - 表达式树 lambda 不能包含空传播运算符

Automapper 8 - An expression tree lambda may not contain a null propagating operator

Automapper 版本 8.0.0 从 IMappingExpression 中删除了 ResolveUsing 扩展方法,并将其与 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())
    );

这会产生编译错误:

Error CS8072

Automapper

An expression tree lambda may not contain a null propagating operator.

与 old/removed ResolveUsing 重载相比,Automapper 8.0.0 中新的基于 Func 的重载接受更多参数。

在替换 ResolveUsing 时,不要使用具有单个输入参数 opt.MapFrom(src => ...) 的 lambda 表达式,而应使用具有 2 个参数的重载 opt.MapFrom((src, dest) => ...).

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())
    );