1

我有 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.

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

4

2 回答 2

2

如果您有继承层次结构,请使用此方法https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance。您需要为每对类型注册映射并仅调用.Map一次。如果您有嵌套对象,请使用这个https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings。同样,只有一个.Map调用。如果您发布了一些对象层次结构的示例,则更容易分辨。

总而言之,您必须为每种“复杂”类型进行映射。

于 2015-05-22T13:29:44.417 回答
0

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

假设你有一个Person.cs, Address.cs,Car和 User 在你的Entities

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

例如

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

}

您定义了所有映射的类。

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

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

于 2015-05-22T13:28:15.523 回答