Automapper 8 от одного DTO до нескольких объектов один-к-одному - PullRequest
0 голосов
/ 19 марта 2019

Я использую Automapper 8 с Entity Framework 6.2, и я не понимаю, как разделить DTO на несколько сущностей.

Модель DTO:

public class DTOMachine {
    public int MachineNumber { get; set; }
    public string ComputerName { get; set; }
    public string Cpu { get; set; }
}

Модель сущностейявляются:

public class Machine
{
    [Key]
    public int Id { get; set; }

    public string ComputerName { get; set; }

    public virtual MachineHW MachineHW { get; set; }
}

с отношением один к одному с MachineHW:

public class MachineHW
{

    [ForeignKey("Machine"), Key]
    public int MachineId { get; set; }

    public string CpuName { get; set; }

    public virtual Machine Machine { get; set; }

}

API с отображением:

[HttpPost]
public IHttpActionResult SetMachineData(List<DTOWorkload> Json)
{

    var config = new MapperConfiguration(
        cfg =>
        {
            cfg.CreateMap<DTOMachine, Machine>()
               .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.MachineNumber))
               .ForPath(d => d.MachineHW.MachineId, o => o.MapFrom(s => s.MachineNumber));
            cfg.CreateMap<DTOMachine, WorkloadMachineHW>()
               .ForPath(d => d.WorkloadMachineId, o => o.MapFrom(s => s.MachineNumber))
               .ForMember(dest => dest.CpuName, opt => opt.MapFrom(src => src.Cpu))                    
            });

    IMapper mapper = config.CreateMapper();
    var test_map = mapper.Map<List<DTOWorkload>, List<Machine>>(Json);

    return Ok();
}

test_map содержитОбъект MachineHW с правильным MachineId, но все остальные свойства все еще пусты.Что плохого в моем отображении?


, если я использую ручное отображение, оно работает, но я думаю, что бесполезно использовать автоматический инструмент в ручном режиме!

cfg.CreateMap<DTOWorkloadMachineInfo, WorkloadMachine>()
   .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.MachineNumber))
   .ForPath(dest => dest.MachineHW.CpuName, o => o.MapFrom(src => src.Cpu));
...