首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在属性名称不同时指定映射规则

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

Stack Overflow用户
提问于 2013-02-09 01:00:32
回答 3查看 83.7K关注 0票数 169

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

代码语言:javascript
复制
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;}
}

注意:Employee类的 name 属性与EmployeeDto类的FullName属性名称不一致。

下面是将Employee对象映射到EmployeeDto的代码

代码语言:javascript
复制
Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***)
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee); 

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-09 01:43:47

不要紧,我自己找到了一个解决方案:

代码语言:javascript
复制
Mapper.CreateMap<Employee, EmployeeDto>()
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));
票数 338
EN

Stack Overflow用户

发布于 2019-07-30 00:09:44

只需将上面的注释滚动到使用Automapper 8.1+的更新方法中...

代码语言:javascript
复制
var mapConfig = new MapperConfiguration(
   cfg => cfg.CreateMap<Employee, EmployeeDto>()
      .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
);

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

代码语言:javascript
复制
var mapper = mapConfig.CreateMapper();
票数 12
EN

Stack Overflow用户

发布于 2020-03-13 23:30:51

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

来自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;} }

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14777601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档