我有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.
这不可能吗?我是否必须为类中的复杂类设置额外的映射?
答案 0 :(得分:1)
如果您有继承层次结构,请使用此方法https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance。您需要为每对类型注册映射,并且只调用 .Map 一次。如果您有嵌套对象,请使用此https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings。同样,只有一个 .Map 调用。如果您发布了一些对象层次结构的示例,则更容易分辨。
总而言之,您必须为每个“复杂”类型设置映射。
答案 1 :(得分:0)
不,您必须在配置中为每个DTO创建映射。
假设您Person.cs
Address.cs
,Car
,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
e.g。
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();
只要属性名称相同,就应该映射。