AutoMapper ForMember не работает при использовании игнорировать свойства - PullRequest
0 голосов
/ 05 октября 2018

Я использую auto mapper для сопоставления двух объектов, но когда я вызываю

Mapper.Map<PropertyDto>(CreatePropertyRequestDto, property)

, возникает исключение, говорящее

Найдены не отображенные элементы.Просмотрите типы и членов ниже.Добавьте пользовательское выражение сопоставления, игнорируйте, добавьте пользовательский преобразователь или измените тип источника / назначения. Если нет подходящего конструктора, добавьте ctor без аргументов, добавьте необязательные аргументы или сопоставьте все параметры конструктора ==================================================================================================================================== AutoMapper создал эту карту типов для вас, но ваши типы не могут быть сопоставлены с использованием текущей конфигурации.CreatePropertyRequestDto -> PropertyDto (список членов-адресатов) PropertyHippo.Properties.Shared.HttpRequestResponse.Dto.CreatePropertyRequestDto -> PropertyHippo.Properties.Shared.Dto.PropertyDto (список членов-адресатов) * 1007 новых свойств: не обновленоGuidString

Ниже представлена ​​моя конфигурация.

    CreateMap<CreatePropertyRequestDto, PropertyDto>()
        .ForMember(dest => dest.PropertyId, opt => opt.Ignore())
        .ForMember(dest => dest.Guid, opt => opt.Ignore())
        .ForMember(dest => dest.CreateDate, opt => opt.Ignore())
        .ForMember(dest => dest.UpdateDate, opt => opt.Ignore())
        .ForMember(dest => dest.LastEditedBy, opt => opt.Ignore())
        .ForMember(dest => dest.GuidString, opt => opt.Ignore());

Я искал ответ и нашел это и это и в документах но я все еще не вижу, что я делаю неправильно.

Что мне не хватает?

РЕДАКТИРОВАТЬ

Добавлена ​​точка останова и можетувидеть, что блок кода ударил.В качестве теста я также удалил нарушающие свойства и могу видеть, как работает карта, как и ожидалось

1 Ответ

0 голосов
/ 06 октября 2018

@ Progman спасибо за предложение создать MCVE.При создании MCVE у меня была проблема с инициализацией маппера, и я нашел этот ответ .

Моя проблема заключалась в том, что я использовал статический метод Mapper.Map, и мне следовало ввести типIMapper (при написании этого ответа я вижу, что мой вопрос пропустил, как настраивались mapperConfiguration).

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.AddProfile(new AutoMapperConfig());
            cfg.AddProfile(new SqlAutoMapperConfig());
        });

        services.AddSingleton(config.CreateMapper());

        services.AddMvc();

        _container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();

        _container.Register<IMapper>(() => mapperConfig.CreateMapper(_container.GetInstance));
    }

Handler.cs

public class PropertyRequestHandler : IRequestHandler<NewPropertyRequest, string>
    {
        public PropertyRequestHandler(IPropertyManager propertyManager, IMapper mapper)
        {
            Ensure.That(mapper).IsNotNull();

            _mapper = mapper;
        }

        private IMapper _mapper { get; }

        public string Handle(NewPropertyRequest message)
        {
            var newProperty = _mapper.Map<PropertyDto>(message.NewProperty);
            ...other stuff...
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...