Я использую Automapper, и у меня есть следующий сценарий: Класс OrderModel имеет свойство с именем «ProductName», которого нет в базе данных. Поэтому, когда я пытаюсь сделать сопоставление с:
Mapper.CreateMap<OrderModel, Orders>();
Это генерирует исключение:
«Следующие 1 свойства в Project.ViewModels.OrderModel не сопоставлены:« ProductName »
Я прочитал в Wiki для проекций AutoMapper противоположный случай (дополнительный атрибут находится в месте назначения, а не в источнике, который фактически является моим случаем)
Как я могу избежать Autopper, чтобы сделать отображение этого свойства?
Ответы:
От Джимми Богарда:
CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
Это в одном из комментариев в его блоге .
источник
CreateMap<Foo, Bar>().ForSourceMember(x => x.Blarg, opt => opt.Ignore());
может быть полезноCreateMap<SourceType, DestType> (MemberList.Source).ForSourceMember(x => x.MySourceProperty, opt => opt.DoNotValidate())
?Ignore()
остается правильный синтаксис. Это потому, что изменение синтаксиса дляIgnore
было сделано наISourceMemberConfigurationExpression
интерфейсе, но не на непересекающемсяIMemberConfigurationExpression`3
интерфейсе.Я, возможно, немного перфекционист; Мне не очень нравится синтаксис ForMember (..., x => x.Ignore ()). Это мелочь, но это важно для меня. Я написал этот метод расширения, чтобы сделать его немного лучше:
Это можно использовать так:
Вы также можете переписать его для работы
params
, но мне не нравится внешний вид метода с множеством лямбд.источник
params
: Вы можете вернуть массив селекторов из одной лямбды, а затем отобразить каждый селектор сforeach
или,Select()
возможно, не менее грязно.Ты можешь сделать это:
источник
Просто для тех, кто пытается сделать это автоматически, вы можете использовать этот метод расширения, чтобы игнорировать несуществующие свойства в типе назначения:
использоваться следующим образом:
спасибо Can Gencer за отзыв :)
источник: http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/
источник
'Mapper' does not contain a definition for 'GetAllTypeMaps' [DSSTools]
..Mapper.Configuration.GetAllTypeMaps()
источникТеперь есть (AutoMapper 2.0)
IgnoreMap
атрибут, который я собираюсь использовать, а не беглый синтаксис, который немного тяжелый ИМХО.источник
IgnoreMapAttribute
.При отображении модели представления обратно в модель домена, может быть намного проще просто проверить исходный список членов, а не целевой список членов.
Теперь моя проверка соответствия не завершается неудачей, требуя другого
Ignore()
, каждый раз, когда я добавляю свойство в свой класс домена.источник
Может использовать IgnoreAttribute для свойства, которое необходимо игнорировать
источник
[IgnoreMap]
отIgnoreMapAttribute
Привет всем, пожалуйста, используйте это, он работает нормально ... для автоматического сопоставления использовать несколько .ForMember в C #
источник