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

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 ответ

Решение

Новый 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())
    );
Другие вопросы по тегам