Сохранять свойство исходного объекта в свойстве назначения при отображении объектов с помощью функции AutoMapper Map - PullRequest
0 голосов
/ 28 октября 2019

Я хочу сопоставить большинство свойств текущего объекта (this a FinancialBase instance) с другим объектом (объект 'destination', schedule, экземпляр класса Schedule). Тем не менее, мне нужно сохранить небольшой набор свойств назначения.

У меня это работает с «хаком», где я фиксирую значения явно, а затем использую их в функции AfterMap. См. Пример кода.

var id = schedule.Id;
var parentId = schedule.ParentId;
var scheduleNo = schedule.ScheduleNo;
var schName = schedule.SchName;

var config = new MapperConfiguration(
    cfg => cfg.CreateMap<FinancialBase, Schedule>()
    .ForMember(d => d.Id, opt => opt.Ignore())
    .ForMember(d => d.ParentId, opt => opt.Ignore())
    .ForMember(d => d.ScheduleNo, opt => opt.Ignore())
    .ForMember(d => d.SchName, opt => opt.Ignore())
    .AfterMap((s, d) => d.Id = id)
    .AfterMap((s, d) => d.ParentId = parentId)
    .AfterMap((s, d) => d.ScheduleNo = scheduleNo)
    .AfterMap((s, d) => d.SchName = schName));
var mapper = config.CreateMapper();
schedule = mapper.Map<Schedule>(this);

Я бы предпочел не использовать первые четыре строки моего примера, а вместо этого включить их, используя обычное лямбда-выражение AutoMapper. Возможно ли это?

1 Ответ

1 голос
/ 31 октября 2019

Я бы просто использовал отображение на существующий объект:

var existingSchedule = new Schedule()
{
    Id = 12,
    ParentId = 34,
    ScheduleNo = 56,
    SchName = "Foo",
};

var schedule = mapper.Map(this, existingSchedule);

И в конфигурации оставьте строки Ignore(), но удалите строки с AfterMap(), так как они больше не нужны:

var config = new MapperConfiguration(
    cfg => cfg.CreateMap<FinancialBase, Schedule>()
        .ForMember(d => d.Id, opt => opt.Ignore())
        .ForMember(d => d.ParentId, opt => opt.Ignore())
        .ForMember(d => d.ScheduleNo, opt => opt.Ignore())
        .ForMember(d => d.SchName, opt => opt.Ignore()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...