Automapper обратная карта через функцию - PullRequest
0 голосов
/ 21 января 2020

В исходном файле Device.cs в упрощенном виде у меня есть:

using Assisticant.Collections;

(...)

private ObservableList<Result> _results = new ObservableList<Result>();

public IEnumerable<Result> Results
{
   get { return _results; }
}

public void AddResult(Result result)
{
    _results.Add(result);
}

Конечный DeviceDto.cs:

public List<Result> Results { get; set; }

Как мне настроить Automapper для создания простого прямого сопоставления от источника к месту назначения и в то же время обратное отображение каждого элемента с помощью функции .AddResult(result)? (Я должен добавить элементы таким образом из-за используемой библиотеки)

Что я должен добавить к:

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Device, DeviceDto>().ReverseMap();
});

_mapper = new Mapper(config);

Ответы [ 2 ]

1 голос
/ 21 января 2020

Вы можете использовать AfterMap:

var config = new MapperConfiguration(
    cfg =>
    {
        cfg.CreateMap<Device, DeviceDto>()
            .ReverseMap()
                .AfterMap((src, dest) =>
                { 
                    foreach (Result result in src.Results)
                    {
                        dest.AddResult(result);
                    }
                });
    });
1 голос
/ 21 января 2020

Не используйте ReverseMap(), но настройте отображение явно от DeviceDto до Device.

Поскольку Device.Results определяет только метод получения, он будет игнорироваться AutoMapper во время этапа отображения. Используйте метод AfterMap, если вам требуется одновременный доступ к источнику и получателю.

using System.Linq;

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Device, DeviceDto>();
    cfg.CreateMap<DeviceDto, Device>()
        .AfterMap((src, dst) => src.Results.Select(result => dst.AddResult(result)));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...