C# 使用AutoMapper将十几个层次化对象映射到DTO
我有一个由12个实体框架对象组成的层次结构 我还为每个实体创建了一个DTO 我想通过电线发送DTO 我必须使用DTO方法 如何使用Automapper映射这么多的对象 我必须使用12倍的AutoMapper.Map方法吗 更新 我现在得到这个错误: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
{"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();