Нужно ли создавать автомапер createmap в обоих направлениях? - PullRequest
38 голосов
/ 31 мая 2011

Это может быть глупый вопрос!(от n00b до AutoMapper и времени!)

Я хочу использовать AutoMapper для сопоставления сущностей EF4 с классами ViewModel.

1) Если я позвоню

CreateMap<ModelClass, ViewModelClass>()

тогда мне также нужно вызвать

CreateMap<ViewModelClass, ModelClass>()

, чтобы выполнить обратное?

2) Если два класса имеют одинаковые имена свойств, то мне вообще нужен оператор CreateMap илиэто только для "определенных / пользовательских" отображений?

Ответы [ 3 ]

105 голосов
/ 26 июля 2012

Для информации людей, которые наткнулись на этот вопрос. Похоже, теперь есть встроенный способ добиться обратного сопоставления путем добавления вызова .ReverseMap() в конце цепочки конфигурации CreateMap().

14 голосов
/ 31 мая 2011

В AutoMapper у вас есть тип источника и тип назначения.Таким образом, вы сможете отобразить этот тип источника и тип назначения, только если у вас есть соответствующая CreateMap.Итак, чтобы ответить на ваши вопросы:

  1. Вам не нужно определять обратное отображение.Это нужно делать только в том случае, если вы намереваетесь отобразить обратно.
  2. Да, вам нужно вызвать CreateMap, чтобы указать, что эти типы сопоставимы, в противном случае при вызове Map<TSource, TDest> будет выдано исключение, сообщающее, что сопоставлениене существует между типом источника и назначения.
8 голосов
/ 29 февраля 2012

Я использовал метод расширения для отображения в обоих направлениях

    public static IMappingExpression<TDestination, TSource> BothWays<TSource, TDestination>
        (this IMappingExpression<TSource, TDestination> mappingExpression)
    {
        return Mapper.CreateMap<TDestination, TSource>();
    }

использование:

 CreateMap<Source, Dest>().BothWays();
...