仅当目标值为 null 时才映射

Map only if destination value is null

我是 automapper 的新手,我试图仅在目标值为空时映射,我检查了文档,但它只显示源值的条件。我可以知道如何在条件下检查目标值吗?

this.CreateMap<DtoObject, MyObject>()
                .EqualityComparison((dto, o) =>
                    dto.id== o.id)
                    .ForMember(s => s.MyField, opt =>
                    {
                    
//I want to Map only MyField of destination object is null, otherwise I don't want to map. But How can I get destination's MyField value?
                   
        });

有两种方法可以达到这个效果。

首选方法是使用 Automapper conditional Mapping:

        CreateMap<DtoObject, MyObject>()
            .ForMember(dest => dest.MyField, opt =>
            {
                opt.PreCondition((source, dest, ctx) => dest.MyField == null);
                opt.MapFrom(src => src.MyField);
            });

另一种方法是在映射过程中使用AfterMap方法结合Ignore,就像这样。

        CreateMap<DtoObject, MyObject>()
            .ForMember(d => d.MyField, a => a.Ignore())
            .AfterMap((source, destination) =>
            {
                if (destination.MyField == null)
                {
                    destination.Name = source.MyField;
                }
            });

这将告诉 AutoMapper 在映射过程中忽略 属性,并在映射后执行一些自定义逻辑。

看看AutoMapper Conditional mapping

使用 PreCondition 允许访问 sourcedestination 并在应映射 属性 时设置条件:

this.CreateMap<DtoObject, MyObject>()
            .EqualityComparison((dto, o) =>
                dto.id== o.id)
                .ForMember(s => s.MyField, opt =>
                {
                    opt.PreCondition((dest, src) => dest.SomeDestinationProperty == null);
                    opt.MapFrom(src => src.SomeSourceProperty);
                });