如何在 entity framework 的 .Add() 中传递 DTO?

How do I pass a DTO in .Add() of entity framework?

例如

我有一个实体

学生

ID, Name, DateCreated, GUID

学生DTO

Name, DateCreated

现在是自动映射器

 CreateMap<students, studentsDTO>()
                .ForSourceMember(up=> up.ID, opt=> opt.Ignore())
                .ForSourceMember(up => up. GUID, opt=> opt.Ignore());

现在我有方法了

public IHttpActionResult AddStudents(studentsDTO model)
        {
            _context.Students.Add(model);
            return Ok();
        }

但抛出错误,指出 model 的类型与 Add 中的预期类型不匹配。

如何解决?

您必须在添加之前将您的 DTO 映射到您的实体,如下所示:

public IHttpActionResult AddStudents(studentsDTO model)
{
    _context.Students.Add(_mapper.Map<Students>(model));
    return Ok();
}

确保通过控制器构造函数注入了 AutoMapper:

private readonly IMapper _mapper;

public StudentsController(IMapper mapper)
{
    _mapper = mapper;
}

然后,您可以使用AutoMapper将DTO转换为实体模型。

public IHttpActionResult AddStudents(studentsDTO model)
{
       students students = _mapper.Map<Students>(model);
       _context.Students.Add(students);

       return Ok();
 }