美文网首页.NETdotNET
06.AutoMapper 之内联映射(Inline Mappi

06.AutoMapper 之内联映射(Inline Mappi

作者: 做人生的CEO | 来源:发表于2019-01-04 07:18 被阅读5次

    内联映射(Inline Mapping)

    AutoMapper在 6.2 以上版本将动态创建类型映射。 当第一次调用Mapper.Map时,AutoMapper将创建类型映射配置并编译映射计划。 之后再调用将使用已编译的映射。

    内联配置

    要配置内联映射,请参考以下例子:

    var source = new Source();
    
    var dest = Mapper.Map<Source, Dest>(source, opt => opt.ConfigureMap().ForMember(dest => dest.Value, m => m.MapFrom(src => src.Value + 10)));
    

    您可以使用本地函数使配置更容易阅读:

    var source = new Source();
    
    void ConfigureMap(IMappingOperationOptions<Source, Dest> opt) {
        opt.ConfigureMap()
           .ForMember(dest => dest.Value, m => m.MapFrom(src => src.Value + 10))
    };
    
    var dest = Mapper.Map<Source, Dest>(source, ConfigureMap);
    

    您还可以在此内联映射中获取和使用运行时的值:

    int valueToAdd = 10;
    var source = new Source();
    
    void ConfigureMap(IMappingOperationOptions<Source, Dest> opt) {
        opt.ConfigureMap()
           .ForMember(dest => dest.Value, m => m.MapFrom(src => src.Value + valueToAdd))
    };
    
    var dest = Mapper.Map<Source, Dest>(source, ConfigureMap);
    

    内联验证

    第一次使用映射时,AutoMapper 将使用默认验证配置来验证映射(目标成员必须全部被映射)。之后调用映射将跳过验证。这可确保安全地映射对象。

    在执行每一个映射时根据配置的验证成员列表来决定验证源、目标还是不验证:

    var source = new Source();
    
    var dest = Mapper.Map<Source, Dest>(source, opt => opt.ConfigureMap(MemberList.None);
    

    也可以完全关闭内联映射验证(除非确保已经测试所有映射,否则不建议这样做):

    Mapper.Initialize(cfg => cfg.ValidateInlineMaps = false);
    

    禁用内联映射

    关闭内联映射:

    Mapper.Initialize(cfg => cfg.CreateMissingTypeMaps = false);
    

    相关文章

      网友评论

        本文标题:06.AutoMapper 之内联映射(Inline Mappi

        本文链接:https://www.haomeiwen.com/subject/okvnlqtx.html