2016-01-15 2 views
1

Просто начал работу с AutoMapper и хотел получить ясность в чем-то.Automapper - создание карт в C#

Предположим, что я хочу легко сопоставить пользователя и пользователя.

примеры все, кажется, предполагают, что я должен сначала перейти в область запуска (например, WebApiConfig.cs или startup.cs или global.axax и т.д.) и сделать что-то вроде этого:

Mapper.CreateMap<User, UserDto>(); 

Предположительно, если У меня было 50 или 100 объектов/DTO, которые я хотел сопоставить, мне нужно было бы буквально добавить 50 или 100 строк кода с сопоставлениями между одним классом в другой? Конечно, есть более умный способ, не так ли?

Если мне не нужно делать какие-либо конкретные сопоставления/переопределения, действительно ли мне нужно это делать? Я, должно быть, неправильно понял основы рамок, потому что это кажется мне неправильным.

Спасибо!

+0

«Конечно, есть более умный способ, верно?». На самом деле, нет. Если вы не хотите сделать это через отражение. Но тогда у вас есть проблема, если * в будущем * вы хотите * конкретное правило для конкретного сопоставления *. – Rob

+0

wow ok спасибо. Мне показалось, что я вручную записываю сопоставление в своем контроллере (когда я хочу сопоставить между двумя вещами) достаточно, чтобы картограф понимал два типа, но я думаю, что нет. Ok thanks – NullHypothesis

+0

Вы поняли (от чтения документов), что вы можете создать все сопоставления, которые вам нужны в одном классе, скажем EntityToViewModel и просто зарегистрировать этот класс в вашем global.asax? Создание их в контроллере будет способствовать созданию некоторого дублирующего кода, и я думаю, что это то, что вас беспокоит? – jpgrassi

ответ

0

Пока все соответствует на источнике и цели, вы можете использовать DynamicMap:

var target = Mapper.DynamicMap<TSource, TTarget>(source); 

Однако было бы более эффективным, чтобы создать отображение в соответствии с требованиями:

if (Mapper.FindTypeMapFor<TSource, TTarget>() == null) 
{ 
    Mapper.CreateMap<TSource, TTarget>(); 
} 

var target = Mapper.Map<TSource, TTarget>(source); 
Смежные вопросы