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