AutoMapper如何将DTO映射到实体,然后映射其他相关实体

时间:2018-01-11 23:41:02

标签: entity-framework automapper

我有这个dto模型:

public class WorkoutModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool IsDeleted { get; set; }
    public int ProgramId { get; set; }
    public List<ExerciseModel> Exercises { get; set; }
}

我在这个DTO中有programId,这就是我保存到db的方式:

public async Task<int> CreateAsync(WorkoutModel model, string createdBy)
{
    var workout = _mapper.Map<Workout>(model);
    workout.Program = await _repository.GetByIdAsync<Program>(model.ProgramId);

    _repository.Create(workout, createdBy);
    return await _repository.SaveAsync();
}

如何使用automapper而不是丑陋:

workout.Program = await _repository.GetByIdAsync<Program>(model.ProgramId);

并不仅仅用于使用自动播放器。

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是更改​​Workout实体类。添加public int ProgramId { get; set; }属性,因为您的public Program Program { get; set; }作为Program表的外键存储在数据库中,并由ProgramId列的约定表示,该列将使用添加的属性表示实体类。

如果您知道引用标识符,则无需从数据库加载Program实体。

然后,您可以更新映射以将model.ProgramId映射到entity.ProgramId,并省略对数据库workout.Program = await _repository.GetByIdAsync<Program>(model.ProgramId);的调用