2016-07-13 8 views
0

Ich weiß, dass AutoMapper automatisch von der Karte können:Namenskonvention in AutoMapper

class SomeClassA 
{ 
    public int Id { get; set; } 
    public B Member { get; set; } 
} 
class SomeClassB 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

zu:

class SomeClassADto 
{ 
    public int Id { get; set; } 
    public int Member_Id { get; set; } 
    public string Member_Name { get; set; } 
} 

Aber wie kann ich AutoMapper Karte von meinem SomeClassADto zu SomeClassA automatisch machen?

+1

Was Sie nennen, ist bekannt als * flattening *. Der umgekehrte Vorgang, sagen wir * Vertiefung *, ist viel schwieriger zu automatisieren. Es wird nicht unterstützt. –

+0

Korrekt. Nicht flachdrücken. Es lohnt sich nicht. Schreib einfach den Code. –

Antwort

0

Nein, das schönste Ding der Welt, aber es funktioniert. Nachteil ist, dass die Wartung mühsam ist, wenn Sie dem DTO und der Klasse Eigenschaften hinzufügen, die Sie zum Aktualisieren des Mappings benötigen.

var config = new MapperConfiguration(x => 
{ 
    x.CreateMap<SomeClassADto, SomeClassB>() 
     .ForMember(i => i.Id, i => i.MapFrom(src => src.Member_Id)) 
     .ForMember(i => i.Name, i => i.MapFrom(src => src.Member_Name)); 
    x.CreateMap<SomeClassADto, SomeClassA>() 
     .AfterMap((s, d, r) => d.Member = r.Mapper.Map<SomeClassB>(s)); 
}); 
IMapper mapper = config.CreateMapper(); 

var foo = mapper.Map<SomeClassA>(new SomeClassADto() { Id = 1, Member_Id = 2, Member_Name = "Name" });