AutoMapper Map From Base Class Include Derived Class

1.6k views Asked by At

Need some expert advice on this Automapper problem I'm trying to solve.

I have three classes, an entity, a base, and a derived class.

public class MyEntity
{
   public string RefNumber {get;set;}
}

public class MyBaseClass
{
    public string UserName {get;set;}
}

public class MyDto : MyBaseClass
{
    public string RefNumber {get;set;}
}

public class MyDto2 : MyBaseClass
{
    public string InvoiceNumber {get;set;}
}  

Based on Automapper docs, I have created the following mapping

CreateMap<MyEntity, MyBaseClass>()
           .ForPath(d => d.UserName , opt => opt.MapFrom(src => src.UserName))
           .IncludeAllDerived();

CreateMap<MyEntity, MyDto>()
           .ForMember(d => d.RefNumber, opt => opt.MapFrom(src => src.RefNumber));

At this point I can easily map either MyDto or MyBaseClass:

       var entity = GetEntity();

       var myMappedDto = _mapper.Map<MyDto>(entity);

       var myMappedBase = _mapper.Map<MyBaseClass>(entity);

Both myMappedDto and myMappedBase return me exactly what I expect, however, the real requirement here is to map entity related Dto (MyDto, MyDto2, etc) AND also return the props from MyBaseClass.

Hopefully that makes sense...appreciate the input.

 public async Task<MyBaseClass> GetAsync(int id)
    {
        var entity = await GetEntity(jobId);

        //based on entity programatically choose the related Dto and map that 
        var mappedThing = _mapper.Map<MyDto>(entity);

        //OR map the base class and somehow magically include the relevant DTO props
        var mappedThing = _mapper.Map<MyBaseClass>(entity);

        return mappedThing;
    }
0

There are 0 answers