代码之家  ›  专栏  ›  技术社区  ›  M4N

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

  •  12
  • M4N  · 技术社区  · 14 年前

    如果源对象为空,是否可以将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 回复  |  直到 8 年前
        1
  •  18
  •   M4N    14 年前

    回答我自己的问题(部分):

    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
  •  3
  •   Vijai    8 年前

    您也可以使用 .NullSubstitute() 要将空值替换为automaper中任何属性的某个自定义值,例如:

    CreateMap<SMModel, VM_SMModel>()
                        .ForMember(d => d.myDate, o => o.NullSubstitute(new DateTime(2017,12,12)));