Automapper 8 - лямбда дерева выражений не может содержать нуль-распространяющий оператор - PullRequest
0 голосов
/ 04 января 2019

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

Лямбда дерева выражений не может содержать нулевой распространяющий оператор.

1 Ответ

0 голосов
/ 04 января 2019

Новые перегрузки на основе Func в Automapper 8.0.0 принимают больше параметров по сравнению со старыми / снятыми перегрузками ResolveUsing.

Вместо использования лямбда-выражения с одним входным параметром opt.MapFrom(src => ...) при замене ResolveUsing, следует использовать перегрузку с 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())
    );
...