AutoMapper: создать экземпляр типа назначения, если source == null - PullRequest
13 голосов
/ 04 августа 2010

Можно ли настроить AutoMapper на возврат нового экземпляра типа назначения, если исходный объект имеет значение null?

Source source = null;
Dest d1 = AutoMapper.Mapper.Map<Source, Dest>(source);
// d1 == null

// I'm looking for a way to configure AutoMapper to
// eliminate this code:
Dest d2 = AutoMapper.Mapper.Map<Source, Dest>(source) ?? new Dest();

Ответы [ 2 ]

18 голосов
/ 06 августа 2010

Отвечая на мой собственный вопрос (частично):

AutoMapper имеет свойство конфигурации с именем AllowNullDestinationValues, которое по умолчанию установлено на true.Установив для этого значение false, я получаю поведение, показанное в вопросе, например:

Mapper.Configuration.AllowNullDestinationValues = false;

//...

Source source = null;
Dest d = AutoMapper.Mapper.Map<Source, Dest>(source);
// d is now a new instance of Dest

Это решение работает нормально для простых типов, где типы источника и назначения хорошо отображаются.У меня все еще есть проблемы со сложными сопоставлениями (я обновлю вопрос, чтобы показать пример).

3 голосов
/ 20 сентября 2016

Вы также можете использовать .NullSubstitute() для замены значения NULL на какое-либо пользовательское значение для любого свойства в Automapper, например:

CreateMap<SMModel, VM_SMModel>()
                    .ForMember(d => d.myDate, o => o.NullSubstitute(new DateTime(2017,12,12)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...