2015-05-22 3 views
0

У меня есть иерархия из 12 объектов фреймворка сущности.Карта дюжины иерархических объектов с AutoMapper в DTO

У меня есть также для каждой сущности, созданной DTO.

Я хочу отправить DTO по кабелю.

Я должен использовать подход DTO.

Как вы бы описали это количество объектов с помощью Automapper?

Должен ли я использовать 12-кратный метод AutoMapper.Map?

UPDATE

Я получаю эту ошибку прямо сейчас:

{"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

Нет, вам нужно создать сопоставление для каждого DTO в config.

Допустим, у вас есть 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

например

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

Покуда Название Свойства одинаковы, они должны карта.

+0

Имеет ли обратная маркировка в двух направлениях? – Pascal

+0

Это синтаксис: AutoMapper.Mapper.CreateMap (); http://cpratt.co/using-automapper-creating-mappings/ –

+0

О, я хочу это, но ... обратное сопоставление выполняется с другой стороны, wcf-сервера. Работает ли реверс? : P – Pascal

1

Если у вас есть иерархия наследования, используйте этот подход https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance. Вам необходимо зарегистрировать сопоставление для каждой пары типов и вызвать . Карта только один раз. Если у вас есть вложенные объекты, используйте этот файл https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings. Опять же, только один . Карта звонок. Если вы разместите несколько примеров своей иерархии объектов, было бы легче сказать.

Подводя итог, вы должны иметь сопоставление для каждого типа «сложный».

Смежные вопросы