Я использую 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));