Карта AutoMapper из базового класса включает производный класс - PullRequest
0 голосов
/ 28 января 2020

Нужен совет специалиста по этой проблеме Automapper, которую я пытаюсь решить.

У меня есть три класса, сущность, база и производный класс.

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

На основе на документах Automapper я создал следующее отображение

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

. На данный момент я могу легко сопоставить либо MyDto, либо MyBaseClass:

       var entity = GetEntity();

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

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

И myMappedDto, и myMappedBase возвращают мне именно то, что я ожидаю однако, реальное требование здесь состоит в том, чтобы отобразить связанный с сущностью Dto (MyDto, MyDto2, et c) И также вернуть реквизиты из MyBaseClass.

Надеюсь, это имеет смысл ... оцените ввод.

 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...