Нужен совет специалиста по этой проблеме 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;
}