【问题标题】:Same mapping for two different types using Automapper使用 Automapper 对两种不同类型进行相同的映射
【发布时间】:2020-12-29 16:59:15
【问题描述】:

假设我有 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 多个属性,我想以某种方式避免重复。

【问题讨论】:

标签: c# automapper


【解决方案1】:

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

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

所以Automapper 将通过其名称自行映射属性。

【讨论】:

  • 不,在我的情况下属性是不同的,所以我需要为每种类型创建一个映射(就像我在我的示例中展示的那样),但问题是这两个映射是相同的。我认为这是代码重复,我正在尝试找到一种方法来避免它。
猜你喜欢
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 2014-09-23
  • 1970-01-01
  • 2021-07-22
相关资源
最近更新 更多