[HttpPatch("{talkId}")] public ActionResult PartiallyUpdateCourseForAuthor(int speakerId, int talkId, JsonPatchDocument patchDocument) { if (!_speakerRepository.SpeakerExists(speakerId)) { return NotFound(); } var talkForSpeakerFromRepo = _talkRepository.GetTalk(speakerId, talkId); if (talkForSpeakerFromRepo == null) { var courseDto = new TalkUpdateDto(); patchDocument.ApplyTo(courseDto, ModelState); if (!TryValidateModel(courseDto)) { return ValidationProblem(ModelState); } var talkToAdd = _mapper.Map(courseDto); talkToAdd.Id = talkId; _talkRepository.AddTalk(speakerId, talkToAdd); _talkRepository.Save(); var courseToReturn = _mapper.Map(talkToAdd); return CreatedAtRoute("GetTalkForSpeaker", new { speakerId, talkId = courseToReturn.Id }, courseToReturn); } var talkToPatch = _mapper.Map(talkForSpeakerFromRepo); // add validation // patchDocument.ApplyTo(talkToPatch, ModelState); patchDocument.ApplyTo(talkToPatch); if (!TryValidateModel(talkToPatch)) { return ValidationProblem(ModelState); } _mapper.Map(talkToPatch, talkForSpeakerFromRepo); _talkRepository.UpdateTalk(talkForSpeakerFromRepo); _talkRepository.Save(); return NoContent(); }