Czy mogę używać mapowania dziedziczenia w AutoMapper (v2.2) dla map o tym samym typie źródła, ale o różnych typach docelowych?AutoMapper - mapowanie dziedziczenia nie działa, to samo źródło, wiele miejsc docelowych
mam tę podstawową sytuację (prawdziwe zajęcia mają o wiele więcej właściwości):
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
i ViewModelB
są różne reprezentacje tej samej klasy Entity:
public class Entity
{
public int Property1 { get; set; }
public int Property2 { get; set; }
public int Property3 { get; set; }
}
chcę ponownie wykorzystać to samo mapowanie BaseViewModel
dla każdego ViewModel, takich jak:
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));
Ale niestety to nie działa. Połączenia takie jak:
var model = Mapper.Map<Entity, ViewModelA>(entity);
spowodować model
po PropertyA
odwzorowane, ale nie CommonProperty
. Wydaje mi się, że poprawnie śledzę przykłady w https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance, ale obawiam się, że tworzenie wielu map utworzonych za pomocą tego samego typu źródła powoduje automatyczne wywoływanie AutoMappera.
Jakieś spostrzeżenia? Podoba mi się pomysł grupowania mapowania klas Base razem, ale to nie działa.
Dla przyszłych czytelników tego pytania - wygląda na to, że AutoMapper naprawił to, ponieważ pytanie zostało zadane. –
Próbuję zrobić to samo tutaj, ale staram się robić: 'var Model = Mapper.Map (podmiot)' ale to wraca wystąpienie ViewModelA, a nie wystąpienie BaseViewModel, nawet myślę, że mówię funkcji Mapa, aby zwrócić typ BaseViewModel. Używam Automapper 3.0, więc wygląda na to, że oryginalny błąd z wersji 2.2 został rozwiązany. –
njkremer
Ten wpis SO pomógł mi w rozwiązaniu problemu i uzyskał pożądany efekt. http://stackoverflow.com/questions/27317719/automapper-how-to-not-repeat-mapping-config-from-complex-type-to-base-class – njkremer