È possibile utilizzare la mappatura di ereditarietà in AutoMapper (v2.2) per le mappe con lo stesso tipo di origine ma tipi di destinazione diversi?AutoMapper - mapping di ereditarietà non funzionante, stessa origine, più destinazioni
ho questa situazione di base (le classi reali hanno molte proprietà):
public abstract class BaseViewModel
{
public int CommonProperty { get; set;}
}
public class ViewModelA : BaseViewModel
{
public int PropertyA { get; set; }
}
public class ViewModelB : BaseViewModel
{
public int PropertyB { get; set; }
}
ViewModelA
e ViewModelB
sono diverse rappresentazioni della stessa classe Entity:
public class Entity
{
public int Property1 { get; set; }
public int Property2 { get; set; }
public int Property3 { get; set; }
}
voglio riutilizzare il stessa mappatura per BaseViewModel
per ogni ViewModel, ad esempio:
Mapper.CreateMap<Entity, BaseViewModel>()
.Include<Entity, ViewModelA>()
.Include<Entity, ViewModelB>()
.ForMember(x => x.CommonProperty, y => y.MapFrom(z => z.Property1));
Mapper.CreateMap<Entity, ViewModelA>()
.ForMember(x => x.PropertyA, y => y.MapFrom(z => z.Property2));
Mapper.CreateMap<Entity, ViewModelB>()
.ForMember(x => x.PropertyB, y => y.MapFrom(z => z.Property3));
Ma sfortunatamente, questo non sembra funzionare. Chiamate come questi:
var model = Mapper.Map<Entity, ViewModelA>(entity);
risultato in model
aver PropertyA
mappati, ma non CommonProperty
. Credo che sto seguendo gli esempi in https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance correttamente, ma temo che avere più mappe create con lo stesso tipo di sorgente stia facendo scattare AutoMapper.
Eventuali approfondimenti? Mi piace l'idea di raggruppare insieme i mapping delle classi base, ma non sembra funzionare.
Per i futuri lettori di questa domanda - sembra che AutoMapper abbia risolto questo problema dal momento in cui è stata posta la domanda. –
Sto cercando di fare la stessa cosa qui, ma sto cercando di fare: 'var model = Mapper.Map (entità)' ma restituisce un'istanza di ViewModelA, non un istanza di BaseViewModel, anche pensato che sto dicendo alla funzione Map per restituire un tipo BaseViewModel. Sto usando Automapper 3.0 così, sembra che il bug originale di 2.2 sia stato risolto. –
njkremer
Questo post SO mi ha aiutato con il mio problema e ha ottenuto l'effetto desiderato per funzionare. http://stackoverflow.com/questions/27317719/automapper-how-to-not-repeat-mapping-config-from-complex-type-to-base-class – njkremer