使用 AutoMapper 将许多分层对象映射到 DTO

Map a dozen of hierarchical objejcts with AutoMapper to DTOs

我有一个包含 12 个 entity framework 个对象的层次结构。

我还为每个实体创建了一个 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.

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

不,您必须在配置中为每个 DTO 创建一个映射。

假设您的 Person.csAddress.csCarEntities

中的用户
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;}

}

所以你还有 PersonDTOAddressDTOCarDTO

例如

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

// HERE IF YOU HAVE:
// public PersonDTO MyPerson {get;set;}
// IT WILL NOT MAP
// Property Names should match

    public PersonDTO Person {get;set;}

    }


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

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

}

您的 class 定义了所有映射。

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();
  }
}

然后在你的代码中:

UserDTO user = Mapper.Map<UserDTO>(context.Users.First(s => s.UserId == 1));

映射列表:

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

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

如果您有继承层次结构,则使用此方法 https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance. You need to register mapping for each pair of types and call .Map only once. If you have nested objects, then use this one https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings。同样,只有一个 .Map 调用。如果您张贴了一些对象层次结构的示例,就更容易分辨了。

总而言之,您必须为每种 'complex' 类型进行映射。