In my API project I have Course
model such:
public class Course
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CourseId { get; set; }
public string CourseName { get; set; }
[ForeignKey("Department")]
public int DepartmentId { get; set; }
public Department Department { get; set; }
public ICollection<CourseEnrollment> CourseEnrollments { get; set; }
public ICollection<CourseAssignment> CourseAssignments { get; set; }
}
I want to applied the DTO
and AutoMapper
concepts to my update course action using HttpPut
,
so I created a CourseUpdateDto
DTO such:
public class CourseUpdateDTO
{
[Required]
public int CourseId { get; set; }
[Required, MaxLength(100)]
public string CourseName { get; set; }
[Required]
public int DepartmentID { get; set; }
}
This is my AutoMapper configuration:
CreateMap<CourseUpdateDTO, Course>()
.ForMember(dest => dest.CourseId,
opts => opts.MapFrom(src => src.CourseId))
.ForMember(dest => dest.CourseName,
opts => opts.MapFrom(src => src.CourseName))
.ForMember(dest => dest.DepartmentId,
opts => opts.MapFrom(src => src.DepartmentID));
And finally this is my trial to update course:
[HttpPut("{id:int}")]
public ActionResult PutCourse(int id, [FromBody] CourseUpdateDTO courseDto)
{
if (courseDto is null)
{
return BadRequest();
}
var entity = new Course
{
CourseId = id,
CourseName = courseDto.CourseName,
DepartmentId = courseDto.DepartmentID
};
_mapper.Map(courseDto, entity);
try
{
_unitOfWork.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
ModelState.AddModelError(nameof(PutCourse), "unable to save changes");
return StatusCode(500, ModelState);
}
return NoContent();
}
When I tested this action using Postman, it returned status of 204
But the course has not changed. Am I wrong anywhere? Im new to this concept so hope someone configure that out to me.