AutoMapper-地图目标对象的属性在源对象中不存在

时间:2019-07-11 11:06:56

标签: asp.net-core automapper

我正在将类Process转换为ProcessDTOProcessDTO对象具有一个名为ProcessSteps的属性,该属性在Process中不存在。我希望将ProcessSteps属性转换为ProcessStepsDto。我正在为AutoMapper使用全局配置。

我尝试使用

CreateMap<Process, ProcessDto>()
    .ForMember(dest=>dest.Steps, opt => opt.MapFrom(s => Mapper.Map<ProcessStepDto>(s)));

但这是错误的。


public class Process
{

}

public class ProcessDto
{
//This property does not exists in source object and get's created on get. I want this to be cast to "ProcessStepDto[]"
    public ProcessStep[] Steps
    {
        get
        {
            ProcessStepRepository repository = new ProcessStepRepository();
            return repository.Select(x => x.ProcessId == this.Id && x.Active).OrderBy(x=>x.Position).ToArray();
        }
    }
}

public class ProcessStep
{
 ...
}

public class ProcessStepDto
{
 ...
}

更新 在使用AutoMapper将对象Process映射到ProcessDto之后,我还希望将Steps的属性映射到ProcessStepsDto。当前它保持为ProcessStepenter image description here

1 个答案:

答案 0 :(得分:0)

如果您想返回ProcessDtoProcessStepDto[],则ProcessDto应使用类型ProcessStepDto[]而不是ProcessStep[]来定义属性。

    public class ProcessDto
    {
        public ProcessStepDto[] Steps
        {
            get
            {
                ProcessStepRepository repository = new ProcessStepRepository();                     

                return repository.Select(x => x.ProcessId == this.Id && x.Active).Select(s => new ProcessStepDto { PropertyInProcessStepDto = s.PropertyInProcessStep }).OrderBy(x=>x.Position).ToArray();
            }
        }
    }