AutoMapper:如果source == null,则创建目标类型的实例

时间:2010-08-04 16:53:24

标签: automapper

如果源对象为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();

2 个答案:

答案 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)));