Używam Automapper i mam następujący scenariusz: Klasa OrderModel ma właściwość o nazwie „ProductName”, która nie znajduje się w bazie danych. Więc kiedy próbuję wykonać mapowanie za pomocą:
Mapper.CreateMap<OrderModel, Orders>();
Generuje wyjątek:
„Następujące 1 właściwości w Project.ViewModels.OrderModel nie są odwzorowane:„ ProductName ”
Przeczytałem na Wiki AutoMapper dla Projekcji odwrotną wielkość liter (dodatkowy atrybut znajduje się w miejscu docelowym, a nie w źródle, które tak naprawdę jest moim przypadkiem)
Jak mogę uniknąć automatycznego mapowania, aby zmapować tę właściwość?
Odpowiedzi:
Od Jimmy'ego Bogarda:
CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
Jest to jeden z komentarzy na jego blogu .
źródło
CreateMap<Foo, Bar>().ForSourceMember(x => x.Blarg, opt => opt.Ignore());
mogą być przydatneCreateMap<SourceType, DestType> (MemberList.Source).ForSourceMember(x => x.MySourceProperty, opt => opt.DoNotValidate())
?Ignore()
pozostaje poprawna składnia. Wynika to z faktu, że zmiany składniIgnore
dokonano wISourceMemberConfigurationExpression
interfejsie, ale nie wIMemberConfigurationExpression`3
interfejsie rozłącznym .Być może jestem trochę perfekcjonistą; Naprawdę nie lubię składni ForMember (..., x => x.Ignore ()). To drobiazg, ale ma dla mnie znaczenie. Napisałem tę metodę rozszerzenia, aby była nieco ładniejsza:
Można go używać w następujący sposób:
Możesz również przepisać go do pracy
params
, ale nie podoba mi się wygląd metody z dużą ilością lambda.źródło
params
: Możesz zwrócić tablicę selektorów z wnętrza jednej lambda, a następnie odwzorować każdy selektor za pomocąforeach
lubSelect()
Być może nie mniej niechlujnie wyglądający.Możesz to zrobić:
źródło
Tylko dla każdego, kto próbuje to zrobić automatycznie, możesz użyć tej metody rozszerzenia, aby zignorować nieistniejące właściwości typu docelowego:
stosować w następujący sposób:
dzięki Can Gencer za wskazówkę :)
źródło: http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/
źródło
'Mapper' does not contain a definition for 'GetAllTypeMaps' [DSSTools]
..Mapper.Configuration.GetAllTypeMaps()
źródłaTeraz jest (AutoMapper 2.0)
IgnoreMap
atrybut, którego zamierzam użyć zamiast płynnej składni, która jest nieco ciężka IMHO.źródło
IgnoreMapAttribute
.Podczas mapowania modelu widoku z powrotem na model domeny znacznie łatwiej jest po prostu sprawdzić źródłową listę członków niż docelową listę członków
Teraz sprawdzanie poprawności mapowania nie kończy się niepowodzeniem, wymagając innej
Ignore()
, za każdym razem, gdy dodam właściwość do mojej klasy domeny.źródło
Można użyć IgnoreAttribute we właściwości, którą należy zignorować
źródło
[IgnoreMap]
odIgnoreMapAttribute
Witam wszystkich Proszę użyć tego działa dobrze ... do automatycznego mapowania używać wielu. Dla Członka w C #
źródło