2010-08-04 2 views
8

Можно ли настроить AutoMapper для возврата нового экземпляра типа назначения, если исходный объект имеет значение null?AutoMapper: создать экземпляр типа назначения, если source == 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(); 
+0

обернуть его в методе или что-то – Omu

ответ

15

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

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 

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

2

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

CreateMap<SMModel, VM_SMModel>() 
        .ForMember(d => d.myDate, o => o.NullSubstitute(new DateTime(2017,12,12))); 
Смежные вопросы