Ho cercato su come utilizzare l'ereditarietà in AutoMapper
ma sto faticando a farlo funzionare completamente con Linq
. Qui è il mio codice:AutoMapper ereditarietà e Linq
ho definito il mio mappature qui:
CreateMap<Article, ArticleDetailsViewModel>()
.Include<Article, ArticleNewsItemDetailsViewModel();
CreateMap<Article, ArticleNewsItemDetailsViewModel>();
ArticleDetailsViewModel
è una classe base di ArticleNewsItemDetailsViewModel
.
Ora qui sta il problema, se ho avuto:
CreateMap<ArticleNewsItem, ArticleNewsItemDetailsViewModel>();
Tutte le proprietà del modello di vista sarebbe mappare automaticamente, perché sono lo stesso nome per oggetto controparte LINQ. Tuttavia, perché sto usando la mappatura Article => ArticleNewsItemDetailsViewModel
questo non è possibile, invece avrei dovuto definire ogni uno come:
.ForMember(x => x.Property1, opt => opt.MapFrom(src => src.ArticleNewsItem.Property1)
ho pensato di spostare tutte le proprietà da ArticleNewsItemDetailsViewModel
in un nuovo modello di vista e avere quella classe una proprietà all'interno di ArticleNewsItemDetailsViewModel
e finché esiste una mappatura tra questi due oggetti, funzionerà, ma non si sentirà molto pulita.
C'è un modo per evitare di dover fare questo?
Non penso che funzioni perché è un mapping di proprietà a una proprietà all'interno di un oggetto nidificato.Non una proprietà che è un oggetto che associa a un oggetto nidificato – ediblecode
Mi spiace, ho frainteso. Non è possibile mappare un oggetto a una proprietà nidificata senza creare una mappa personalizzata tramite i metodi '.ConstructUsing()' o '.ConvertUsing()'. Dovresti davvero mappare come per piacere. Ecco un buon esempio: http://automapper.codeplex.com/wikipage?title=Nested%20Mappings – NinjaNye
Grazie per aver compreso la domanda. Tuttavia, non è necessario definire il mapping all'interno di ConstructItem in quanto ciò può essere fatto utilizzando .ForMember e l'accesso alle proprietà nidificate. – ediblecode