public static void Main()
IMapper mapper = new MapperConfiguration(cfg => cfg.AddProfile<MappingProfile>())
mapper.ConfigurationProvider.AssertConfigurationIsValid();
Console.WriteLine("mapper.ConfigurationProvider.AssertConfigurationIsValid();");
Console.WriteLine("-- Create a domain model --");
var child = new Child(1, new Parent(2, 100), Attempt.SecondRetry);
Console.WriteLine(child);
Console.WriteLine("-- Mapping from domain model to dbo --");
var childDbo = mapper.Map<ChildDbo>(child);
Console.WriteLine(childDbo);
Console.WriteLine("-- Mapping from dbo back to domain model --");
var child2 = mapper.Map<Child>(childDbo);
Console.WriteLine(child2);
public int Id { get; private set; }
public int TypeId { get; private set; }
public Parent(int parentId, int typeId)
public override string ToString()
return JsonConvert.SerializeObject(this, Formatting.Indented);
public int Id { get; private set; }
public Parent Parent { get; private set; }
public Attempt Attempt { get; private set; }
public Child(int childId, Parent parent, Attempt retryNumber)
this.Attempt = retryNumber;
public override string ToString()
return JsonConvert.SerializeObject(this, Formatting.Indented);
public int ParentId { get; set; }
public int TypeId { get; set; }
public int ChildId { get; set; }
public ParentDbo Parent { get; set; }
public int RetryNumber { get; set; }
public override string ToString()
return JsonConvert.SerializeObject(this, Formatting.Indented);
public class MappingProfile : Profile
CreateMap<Child, ChildDbo>()
.ForMember(dest => dest.ChildId, opts => opts.MapFrom(src => src.Id))
.ForMember(dest => dest.RetryNumber, opts => opts.MapFrom(src => (int)src.Attempt))
CreateMap<Parent, ParentDbo>()
.ForMember(dest => dest.ParentId, opts => opts.MapFrom(src => src.Id))