asp.net

AutoMapper的自定义映射

2025-01-08

AutoMapper 是一个对象-对象映射的库,可以帮助你简化两个对象之间的属性复制。它特别适用于将数据传输对象 (DTO) 映射到业务对象,或反之亦然。

性能方面,AutoMapper不如自己写构造函数手动映射,但是优势在于代码可读性和维护性


自定义映射

你可以在映射配置中自定义属性映射,例如:

public class MappingProfile : Profile

{

    public MappingProfile()

    {

        CreateMap<Source, Destination>()

            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.FullName));

    }

}

CreateMap<Source, Destination>() 定义了从 Source 类型到 Destination 类型的映射关系。 

ForMember 方法用于配置特定成员(属性或字段)的映射方式。(如果是子对象的子对象,需要用ForPath,比如 ForPath(dest=>dest.Name.FirstName,...))


ForMember 方法的参数

1、第一个参数:dest => dest.Name

这是一个 lambda 表达式,用于指定目标对象 (Destination) 中的成员(属性或字段),即你希望映射的目标属性。在这个例子中,它是 Destination 类中的 Name 属性。


2、第二个参数:opt => opt.MapFrom(src => src.FullName)

1)这是一个 lambda 表达式,用于配置映射选项 (opt 表示 options)。

2)opt.MapFrom(src => src.FullName) 指定了从源对象 (Source) 的哪个成员映射到目标对象的 Name 成员。在这个例子中,它是 Source 类中的 FullName 属性。


opt 是什么

opt 是 IMemberConfigurationExpression<Source, Destination, TMember> 类型的一个实例。这个接口定义了如何配置成员的映射。在 ForMember 方法中,opt 提供了各种配置选项,如 MapFrom(映射来源), Ignore(忽略映射), Condition(根据条件进行映射), NullSubstitute(为空时的替代值) 等。