2013-05-14 2 views
2

У меня есть два класса:Список карт <> с Automapper?

public class CustomerDTO 
{ 

public string Name {get;set;} 
public List<Order> Orders {get;set;} 

} 

public class OrderDTO 
{ 
public string Name {get;set;} 
public string Description {get;set;} 
public decimal Cost{get;set;} 
} 

Я использую AutoMapper для .NET 3.5 и в настоящее время делает следующее в моем Application_Startup:

Mapper.CreateMap<Customer, CustomerDTO>(); 
Mapper.CreateMap<Order,OrderDTO>(); 

Это упрощенный пример, как я назвал мои свойства DTO разные чем мои свойства сущностей, так что я использовал ForMember, но я не ясно о том, как карта Поручения Клиента:

Я попытался:

Mapper.CreateMap<Customer, CustomerDTO() 
.ForMember(dest => dest.Orders, opt=> opt.MapFrom(src=>src.Orders)); 

но не найдено src.Orders.

Если мне действительно нужно иметь оба CreateMap заявления, делает AutoMapper «автоматически» связывает объекты Customer к Orders?

+0

В коде, который вы опубликовали, CustomerDTO имеет «заказы», ​​а не свойство «Заказы». Это просто опечатка в публикации? Если он будет опубликован, это будет проблемой, имена свойств будут чувствительны к регистру. – pstrjds

+1

Кроме того, если ваша карта от 1 до 1, то вы можете просто сделать «Mapper.Map (cust, custDTO)». –

+0

не должен содержать код «ListMOrdersDTO> Orders {get; set};' ?? – MethodMan

ответ

0

Да, вы должны сообщить AutoMapper о каждом сопоставлении. Это вас не угадает. Итак, если OrderDTO должен отображаться на Order, вы должны указать AutoMapper. Вы также должны указать обратную связь, если это необходимо (то есть Order должно отображаться на OrderDTO).

Другими словами, для двунаправленного отображения вам потребуется:

Mapper.CreateMap<Order, OrderDTO>(); 
Mapper.CreateMap<OrderDTO, Order>(); 

Насколько Customer идет, если оба Customer и CustomerDTO имеют свойство с именем Orders, вам не нужно делать что-нибудь еще , Если вы указали AutoMapper на карту между Order и OrderDTO и Customer и CustomerDTO, он автоматически отобразит ваш Order, когда вы наберете Customer.

+1

Можете ли вы использовать .ReverseMap() для этого, @Chris Pratt –

+2

Nice. Я действительно не знал о 'ReverseMap'. AutoMapper замечательный, но документация оставляет желать лучшего. Тем не менее, имейте в виду, что 'ReverseMap' работает только с простыми сопоставлениями, как показано выше. Если вам нужно делать настраиваемые материалы с помощью «MapFrom» и т. Д., Тогда вам придется выходить в каждом направлении. –

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