如何在属性名称不同时指定映射规则

Tho*_*enz 139 c# automapper

我是Automapper框架的新手.我有一个域类和一个DTO类,如下所示:

public class Employee
{
   public long Id {get;set;}
   public string Name {get;set;}
   public string Phone {get;set;}
   public string Fax {get;set;}
   public DateTime DateOfBirth {get;set;}
}

public class EmployeeDto
{
   public long Id {get;set;}
   public string FullName {get;set;}
   public DateTime DateOfBirth {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

注意:类的属性" Name "的名称Employee类的属性" FullName "的名称不同EmployeeDto.

这是将Employee对象映射到的代码EmployeeDto:

Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***)
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee); 
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果我想将Employee(源类)映射到EmployeeDto(目标类),我该如何指定映射规则?换句话说,我应该如何处理上面的代码行(***)?

Tho*_*enz 272

没关系,我自己找到了解决方案:

Mapper.CreateMap<Employee, EmployeeDto>()
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));
Run Code Online (Sandbox Code Playgroud)

  • @MattThomas在看了一下automapper的github后,我看到从5.0版开始,CreateMap已经过时了,他们说你需要使用MapperConfiguration或Mapper.Initialize. (6认同)
  • @ Navid_pdp11是的.您需要使静态类Mapper不是实例 (3认同)
  • Mapper类中没有CreateMap方法:( (2认同)

ebo*_*000 12

只是为了使用 Automapper 8.1+ 将上面的评论滚动到更新的方法中......

var mapConfig = new MapperConfiguration(
   cfg => cfg.CreateMap<Employee, EmployeeDto>()
      .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
);
Run Code Online (Sandbox Code Playgroud)

然后您将使用 mapConfig 构建映射器:

var mapper = mapConfig.CreateMapper();
Run Code Online (Sandbox Code Playgroud)


小智 6

我们还可以指定用于映射的类属性

来自https://docs.automapper.org/en/stable/Conventions.html#attribute-support

属性支持

AddMemberConfiguration().AddName<SourceToDestinationNameMapperAttributesMember>(); * 当前始终开启

查找属性/字段的 SourceToDestinationMapperAttribute 实例,并调用用户定义的 isMatch 函数来查找成员匹配项。

MapToAttribute 是其中之一,它将根据提供的名称匹配属性。

public class Foo
{
    [MapTo("SourceOfBar")]
    public int Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 检查新样式:) http://docs.automapper.org/en/latest/Attribute-mapping.html (2认同)