asp.net - Automapper 映射不一致
问题描述
我有这个课下课。student, studentrequest(Dto) , 映射配置文件和 apicontroller。
我不知道为什么它映射到空值。
public class Student : BaseEntity, IAuditableEntity, IDeletableEntity
{
[Required]
public string StudentId { get; set; }
[Required]
public string NameKH { get; set; }
[Required]
public string NameEN { get; set; }
public string PhoneNumber { get; set; }
public string MotherNameKH { get; set; }
public string MotherNameEN { get; set; }
public string FatherNameKH { get; set; }
public string FatherNameEN { get; set; }
public string MotherPhoneNumber { get; set; }
public string FatherPhoneNumber { get; set; }
[Required]
public string CurrentAddress { get; set; }
[Required]
public string Nationality { get; set; }
[Required]
public string Ethnicity { get; set; }
[Required]
public DateTime DateOfBirth { get; set; }
[Required]
public string PlaceOfBirth { get; set; }
public string Notes { get; set; }
[Required]
public string CreatedBy { get; set; }
[Required]
public DateTime CreatedOn { get; set; }
public string LastModifiedBy { get; set; }
public DateTime? LastModifiedOn { get; set; }
public bool IsDeleted { get; set; }
public DateTime? DeletedOn { get; set; }
}
和 DTO
public class StudentRequest
{
[Required]
public string StudentId { get; set; }
[Required]
public string NameKH { get; set; }
[Required]
public string NameEN { get; set; }
public string PhoneNumber { get; set; }
public string MotherNameKH { get; set; }
public string MotherNameEN { get; set; }
public string FatherNameKH { get; set; }
public string FatherNameEN { get; set; }
public string MotherPhoneNumber { get; set; }
public string FatherPhoneNumber { get; set; }
[Required]
public string CurrentAddress { get; set; }
[Required]
public string Nationality { get; set; }
[Required]
public string Ethnicity { get; set; }
[Required]
public DateTime DateOfBirth { get; set; }
[Required]
public string PlaceOfBirth { get; set; }
public string Notes { get; set; }
}
映射配置文件
CreateMap<StudentRequest, Student>()
我的更新 API 控制器
[HttpPut("{id}")]
public async Task<ActionResult> Update(int id, StudentRequest studentRequest)
{
var student = await _context.Students.SingleOrDefaultAsync(x => x.IsDeleted != true && x.Id == id);
if (student == null) return NotFound(new ApiResponse(404, "Student Not Found"));
student = _mapper.Map<StudentRequest, Student>(studentRequest);
student.LastModifiedBy = GetCurrentUserName();
student.LastModifiedOn = DateTime.Now;
try
{
_context.Students.Add(student);
await _context.SaveChangesAsync(GetCurrentUserName(), GenerateIPAddress());
return Ok(new ApiResponse(200, "Succesfully Added Student"));
}
catch (Exception ex)
{
Log.Error(ex.Message);
return BadRequest(new ApiResponse(400, "Error Adding Student"));
}
}
这条线student = _mapper.Map<StudentRequest, Student>(studentRequest);
第一个学生已经有CreatedBy
, CreatedOn
, 数据。
但映射后,student.CreatedBy = null;
我不知道这个行为映射有什么问题。
解决方案
studentMapped = _mapper.Map<StudentRequest, Student>(studentRequest);
student = studentMapped;
studentRequest 没有CreatedBy
属性。所以studentMapped.CreatedBy
将是空的。你把它设置为学生。
我认为这段代码可能会有所帮助:
_mapper.Map<StudentRequest, Student>(studentRequest,student);
推荐阅读
- android - 网络连接重置后从 Firestore 获取文档 - Android
- amazon-web-services - 我只是想了解 AWS 与 siteground 等较小站点之间的区别。它如何与实际网站交互
- java - 连锁活动导致OOM
- jquery - jQuery MouseWheel 事件到捏事件
- java - 减少一个数据库表中的一项并将其添加到另一个表
- angular - Maximum call stack size exceeded when adding PWA in Angular
- javascript - 使用 jQuery 更改查询参数的值
- mysql - “调用未定义的方法 Illuminate\Support\Facades\File::save()”
- javascript - 如何在多边形上显示标签和图标?
- amazon-web-services - 我正在实施 AWS 实例调度程序,如果我想保持实例/环境正常运行,尽管它计划停止运行,我该怎么办?