如果源对象为null,是否可以将AutoMapper配置为返回目标类型的新实例?
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 :(得分:18)
回答我自己的问题(部分):
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
此解决方案适用于简单类型,其中源和目标类型可以很好地映射。我仍然遇到复杂映射的一些问题(我将更新问题以显示示例)。
答案 1 :(得分:3)
您还可以使用.NullSubstitute()
将NULL值替换为Automapper中任何属性的某个自定义值,例如:
CreateMap<SMModel, VM_SMModel>()
.ForMember(d => d.myDate, o => o.NullSubstitute(new DateTime(2017,12,12)));