Автокартопостроитель - Много объектный источник и одно место назначения

Я использую автоматический картопостроитель для отображения нескольких объектов (класс дб в объекты пользовательского интерфейса).

Карта 1:

Mapper.CreateMap<sourceone, destination>().ForMember(sss => sss.one, m => m.MapFrom(source => source.abc));

Карта 2:

Mapper.CreateMap<sourcetwo, destination>().ForMember(sss => sss.two, m => m.MapFrom(source => source.xyz));

destination d = new destination();

//Карта 1

d = AutoMapper.Mapper.Map<sourceone, destination>(sourceone);

//Карта 2

d = AutoMapper.Mapper.Map<sourcetwo, destination>(sourcetwo);

После того как я выполняю вызов к 'Карте 2', значения, которые заполняются с помощью Карты 1, потеряны.. (т.е. destination.one становится пустым). Как я фиксирую это?

57
задан 25 October 2013 в 15:11

1 ответ

Согласно мне необходимо постараться не называть перегруженный метод Карты, берущий экземпляр целевого объекта, как объяснено в принятом ответе. Это не позволит Вам тестировать/проверять свою конфигурацию отображения (Mapper.Configuration.AssertConfigurationIsValid()), или сделать так Вы добавите много 'Ignore' в Ваших отображениях.

очень простое решение А состоит в том, чтобы создать составной тип, содержащий исходные ссылки, и определить Ваше отображение на место назначения на основе того составного типа.

Что-то как:

    public class SourceOneTwo
    {
        public SourceOne SourceOne { get; set; }
        public SourceTwo SourceTwo { get; set; }
    }
    static void Main(string[] args)
    {
        var config = new MapperConfiguration(cfg => 
            cfg.CreateMap<SourceOneTwo, Destination>()
            .ForMember(dest => dest.one, m => m.MapFrom(source => source.SourceOne.abc))
            .ForMember(dest => dest.two, m => m.MapFrom(source => source.SourceTwo.xyz)));
        config.AssertConfigurationIsValid();
    }
1
ответ дан 1 November 2019 в 16:21

Другие вопросы по тегам:

Похожие вопросы: