如何在实体框架的 .Add() 中传递 DTO?
Posted
技术标签:
【中文标题】如何在实体框架的 .Add() 中传递 DTO?【英文标题】:How do I pass a DTO in .Add() of entity framework? 【发布时间】:2021-11-16 19:19:13 【问题描述】:例如
我有一个实体
学生
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
中的预期类型不匹配的错误。
我该如何解决?
【问题讨论】:
错误很明显。students
是实际类型吗?在这种情况下,您需要将studentsDTO
映射到students
,然后然后 将结果添加到_context.Students
。简单配置 AutoMapper 并不意味着它会被使用
顺便说一句,实体名称应该是单数。你有一个学生,而不是一个学生
@PanagiotisKanavos,谢谢,但是该怎么做呢?
【参考方案1】:
您必须在添加之前将您的 DTO 映射到您的实体,如下所示:
public IHttpActionResult AddStudents(studentsDTO model)
_context.Students.Add(_mapper.Map<Students>(model));
return Ok();
【讨论】:
【参考方案2】:确保您已通过控制器构造函数注入 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();
【讨论】:
以上是关于如何在实体框架的 .Add() 中传递 DTO?的主要内容,如果未能解决你的问题,请参考以下文章