Reputation: 65
I have a problem with my AutoMapper configuration, I can map for one level but I don't know if there exists a way to map for two levels
I have:
Class A
{
public int id {get; set;}
public string nom {get; set;}
public B Bprop {get; set;}
}
Class B
{
public int id {get; set;}
public string nom {get; set;}
public C Cprop {get; set;}
}
Class C
{
public int id {get; set;}
public string nom {get; set;}
}
My code for configuration is below, and it works if I delete Cprop
from class B
:
MapperTools<DatabaseA, A> mapperToolsService =
new MapperTools<DatabaseA, A>(MappingHelper);
mapperToolsService.MappingConfig.Configuration.CreateMap<DatabaseA, A>()
.ForMember(dest => dest.Bprop , opt => opt.MapFrom(src => src.DatabaseB));
mapperToolsService.MappingConfig.Configuration.CreateMap<DatabaseB,B>();
Please, what is wrong with my code?
Upvotes: 0
Views: 2548
Reputation: 2204
Actually this is three level mapping.
Add mapping for class C as you have for class B. Extend mapping for class B to cover Cprop.
Assuming that DatabaseX have Xprop field corresponding to Xprop field in target classes(A, B, C) it should look like this:
Mapper.CreateMap<DatabaseA, A>()
.ForMember(dest => dest.Bprop , opt => opt.MapFrom(src => src.Bprop));
Mapper.CreateMap<DatabaseB,B>()
.ForMember(dest => dest.Cprop , opt => opt.MapFrom(src => src.Cprop));
Mapper.CreateMap<DatabaseC, C>();
Here is working example: https://github.com/st4hoo/Automapper3LevelMappingExample
Upvotes: 2