Ich mappe meine Entitäten auf DTOs, mit AutoMapper. Einige meiner Entitäten haben virtuelle Eigenschaften, die von abgeleiteten Entitäten außer Kraft gesetzt werden können. Ich mappe die virtuellen Eigenschaften mit den Basisklassen, in denen sie definiert sind. Wenn ich jedoch die abgeleiteten Klassen zuordne, ordnet AutoMapper die Basisimplementierung der virtuellen Eigenschaften anstelle der überschriebenen Eigenschaften zu.
Ich beginne mit den Klassendefinitionen:
public class BaseType
{
public virtual string Title
{
get { return string.Empty; }
}
}
public class DerivedType : BaseType
{
public override string Title
{
get { return Name; }
}
public string Name { get; set; }
}
public class BaseTypeDto
{
public string Title { get; set; }
}
public class DerivedTypeDto : BaseTypeDto
{
public string Name { get; set; }
}
Nun zur Konfiguration des Mappings:
CreateMap<BaseType, BaseTypeDto>()
.ForMember(n => n.Title, p => p.MapFrom(q => q.Title ?? "-"))
.Include<DerivedType, DerivedTypeDto>();
CreateMap<DerivedType, DerivedTypeDto>()
Und schließlich die Kartierung:
DerivedTypeDto dto = Mapper.Map<DerivedType, DerivedTypeDto>(instance);
Wenn ich die Titelzuordnung auf den CreateMap-Aufruf setze, der den abgeleiteten Typ konfiguriert, funktioniert es. Aber da ich etwa 20 abgeleitete Typen habe, möchte ich wirklich, dass die Title-Zuordnung in der Basisklasse konfiguriert wird und nicht für jede abgeleitete Klasse wiederholt werden muss.
Ist dies mit AutoMapper möglich?