2010-12-05 7 views
3

Ich ordne meine Entitäten DTOs mit AutoMapper. Einige meiner Entitäten haben virtuelle Eigenschaften, die von abgeleiteten Entitäten überschrieben werden können. Ich mappe die virtuellen Eigenschaften mithilfe der Basisklassen, in denen sie definiert sind. Beim Zuordnen der abgeleiteten Klassen ordnet AutoMapper jedoch die Basisimplementierung der virtuellen Eigenschaften statt der überschriebenen zu.Wie wird eine virtuelle Eigenschaft zugeordnet, ohne sie explizit für jede abgeleitete Klasse zuzuordnen, die die Eigenschaft mit AutoMapper überschreibt?

werde ich mit den Klassendefinitionen beginnen:

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; }  
} 

Jetzt für die Mapping-Konfiguration:

CreateMap<BaseType, BaseTypeDto>() 
    .ForMember(n => n.Title, p => p.MapFrom(q => q.Title ?? "-")) 
    .Include<DerivedType, DerivedTypeDto>(); 

CreateMap<DerivedType, DerivedTypeDto>() 

Und schließlich die Zuordnung:

DerivedTypeDto dto = Mapper.Map<DerivedType, DerivedTypeDto>(instance); 

Als ich den Titel setzen Mapping auf den CreateMap-Aufruf, der den abgeleiteten Typ konfiguriert, funktioniert es. Aber da ich ungefähr 20 abgeleitete Typen habe, möchte ich wirklich, dass das Title Mapping für die Basisklasse konfiguriert wird und nicht für jede abgeleitete Klasse wiederholt werden muss.

Ist dies mit AutoMapper möglich?

Antwort

1

Konnten Sie die ConstructUsing() Option nicht verwenden? Dies würde es Ihnen ermöglichen, einen Delegaten ständig dem Basisklassenobjekt zuzuordnen?

CreateMap<basetype, baseTypeDto>() 
    .ConstructUsing(y => base.title = basetype.title); 
Verwandte Themen