C# 使用AutoMapper将十几个层次化对象映射到DTO

C# 使用AutoMapper将十几个层次化对象映射到DTO,c#,automapper,automapper-3,C#,Automapper,Automapper 3,我有一个由12个实体框架对象组成的层次结构 我还为每个实体创建了一个DTO 我想通过电线发送DTO 我必须使用DTO方法 如何使用Automapper映射这么多的对象 我必须使用12倍的AutoMapper.Map方法吗 更新 我现在得到这个错误: {"Missing type map configuration or unsupported mapping.\r\n\r\n.... I have an NumberEntity.cs with 3 complex properties whic

我有一个由12个实体框架对象组成的层次结构

我还为每个实体创建了一个DTO

我想通过电线发送DTO

我必须使用DTO方法

如何使用Automapper映射这么多的对象

我必须使用12倍的AutoMapper.Map方法吗

更新

我现在得到这个错误:

{"Missing type map configuration or unsupported mapping.\r\n\r\n....
I have an NumberEntity.cs with 3 complex properties which I want to map to

a NumberDTO.cs with 3 complex properties.

这不可能吗?是否必须为类中的复杂类设置额外的映射?

否,必须为配置中的每个DTO创建映射

假设您的
实体中有
Person.cs
Address.cs
Car
和用户

public class User
{
public int UserId {get;set;}
public string UserName {get;set;}

public PersonDTO Person {get;set;}
}

public class Person
{
public int PersonID {get;set;}
public string Name {get;set;}

public Address Address {get;set;}
public Car Car {get; set;}

}
因此您还有
PersonDTO
AddressDTO
,和
CarDTO

e、 g

定义了所有映射的类

public class MapperConfig
{
  public static void CreateMappings()
  {
        Mapper.CreateMap<UserDTO, Entities.User>().ReverseMap();
        Mapper.CreateMap<PersonDTO, Entities.Person>().ReverseMap();

        Mapper.CreateMap<AddressDTO, Entities.Address>().ReverseMap();
        Mapper.CreateMap<CarDTO, Entities.Car>().ReverseMap();
  }
}
公共类MapperConfig
{
公共静态void CreateMappings()
{
Mapper.CreateMap().ReverseMap();
Mapper.CreateMap().ReverseMap();
Mapper.CreateMap().ReverseMap();
Mapper.CreateMap().ReverseMap();
}
}
然后在代码中:

UserDTO user = Mapper.Map<UserDTO>(context.Users.First(s => s.UserId == 1));
UserDTO user=Mapper.Map(context.Users.First(s=>s.UserId==1));
要映射列表,请执行以下操作:

List<UserDTO> users = Mapper.Map<IEnumerable<UserDTO>>(context.Users).ToList();
List users=Mapper.Map(context.users.ToList();

只要属性的名称相同,它们就应该映射。

如果您有继承层次结构,那么使用这种方法。您只需要为每对类型和call.Map注册一次映射。如果有嵌套对象,则使用此对象。再一次,只有一个。地图呼叫。如果您发布了一些对象层次结构的示例,则更容易判断


总之,您必须为每个“复杂”类型创建映射

reverseMap是否意味着它是在两个方向上配置的?这是语法:AutoMapper.Mapper.CreateMap();哦,我想要那个,但是。。。反向映射在另一端wcf服务器上完成。反过来还能用吗我不确定,我认为您必须在客户端和服务器端创建映射。或者将其放在公共库中,并在客户端和服务器之间共享
List<UserDTO> users = Mapper.Map<IEnumerable<UserDTO>>(context.Users).ToList();