Szukałem, jak korzystać z dziedziczenia w AutoMapper
, ale staram się, aby działał w pełni z Linq
. Tu jest mój kodu:Dziedziczenie AutoMapper i Linq
Mam zdefiniowane moje mapowania tutaj:
CreateMap<Article, ArticleDetailsViewModel>()
.Include<Article, ArticleNewsItemDetailsViewModel();
CreateMap<Article, ArticleNewsItemDetailsViewModel>();
ArticleDetailsViewModel
to klasa bazowa ArticleNewsItemDetailsViewModel
.
Teraz tutaj tkwi problem, gdybym miał:
CreateMap<ArticleNewsItem, ArticleNewsItemDetailsViewModel>();
wszystkich właściwości w modelu widoku automatycznie map ponieważ są one takie same jak ich nazwa obiektu Linq odpowiednika. Jednak, ponieważ używam mapowanie Article => ArticleNewsItemDetailsViewModel
to nie jest możliwe, a nie będę musiał zdefiniować każdy jak:
.ForMember(x => x.Property1, opt => opt.MapFrom(src => src.ArticleNewsItem.Property1)
myślałem o przeniesieniu wszystkich właściwości z ArticleNewsItemDetailsViewModel
do nowego modelu widoku i posiadające tej klasy właściwość wewnątrz ArticleNewsItemDetailsViewModel
i dopóki istnieje mapowanie między tymi dwoma obiektami, to zadziała, ale nie będzie bardzo czysta.
Czy istnieje sposób na uniknięcie tego obowiązku?
Nie sądzę, że to działa, ponieważ jest to właściwość odwzorowująca właściwość w obiekcie zagnieżdżonym.Nie jest właściwością, która jest mapowaniem obiektów do zagnieżdżonego obiektu. – ediblecode
Przepraszam, źle mnie zrozumiałem. Nie można odwzorować obiektu na zagnieżdżoną właściwość bez tworzenia niestandardowej mapy za pomocą metod '.ConstructUsing()' lub '.ConvertUsing()'. Powinieneś naprawdę mapować, jak na przykład. Oto dobry przykład: http://automapper.codeplex.com/wikipage?title=Nested%20Mappings – NinjaNye
Dzięki za zrozumienie pytania. Jednak nie ma potrzeby definiowania odwzorowania w ConstructItem, ponieważ można to zrobić za pomocą .ForMember i uzyskiwanie dostępu do zagnieżdżonych właściwości. – ediblecode