使用 Automapper 对两种不同类型进行相同映射

时间:2020-12-29 08:34:11

标签: c# automapper

假设我有类 UserInfoDto、UserDto 和 User

//Dto
public class UserInfoDto
{
     public string UserName {get; set;}
     public DateTime DoB {get; set;}
}

//Another Dto
public class UserDto
{
     public string Name {get; set;}
     public DateTime DateOfBirth {get; set;}
}

//DB model
public class User
{
     public string Name {get; set;}
     public DateTime DateOfBirth {get; set;}
}

我想创建 2 个映射:

  1. 从 UserInfoDto 到 UserDto

  2. 从 UserInfoD 到用户

     CreateMap<UserInfoDto, UserDto>()
         .ForMember(d => d.Name, opt => opt.MapFrom(s => s.UserName))
         .ForMember(d => d.DateOfBirth, opt => opt.MapFrom(s => s.DoB))
    
     CreateMap<UserInfoDto, User>()
         .ForMember(d => d.Name, opt => opt.MapFrom(s => s.UserName))
         .ForMember(d => d.DateOfBirth, opt => opt.MapFrom(s => s.DoB))
    

如您所见,我有两个相同的映射。有没有办法只创建一个映射(例如第一个)并在第二种情况下重用这个映射的设置?

我之所以这么问是因为在现实世界的代码中我有 20 多个属性,我想以某种方式避免重复。

1 个答案:

答案 0 :(得分:1)

如果您的属性具有相同的名称,则无需显式映射它们。做到以下几点就足够了:

CreateMap<UserInfoDto, UserDto>();
CreateMap<UserInfoDto, User>();

因此,Automapper 将通过自身的名称映射属性。