Пример #1
0
        public async Task <ActionResult> UpdatePersonAsync(Guid personId, JsonPatchDocument <UpdatePersonDTO> patchDocument)
        {
            // Ensure person exists.
            if (!_familyDemoAPIv2Repository.PersonExists(personId).Result)
            {
                return(NotFound());
            }

            var personFromRepo = _familyDemoAPIv2Repository.GetPerson(personId).Result; // Obtain record via DbContext query and store in entity.
            var personToPatch  = _mapper.Map <UpdatePersonDTO>(personFromRepo);         // Map populated entity to DTO.

            patchDocument.ApplyTo(personToPatch, ModelState);                           // Apply (patch) new values to populated DTO.

            // Validate model using ControllerBase.
            if (!TryValidateModel(personToPatch))
            {
                return(ValidationProblem(ModelState));
            }

            _mapper.Map(personToPatch, personFromRepo);                    // Map new values from patched DTO to populated entity.
            await _familyDemoAPIv2Repository.UpdatePerson(personFromRepo); // Call repo and update context with with populated entity.

            // Return updated person.
            // return Ok(personFromRepo);

            // Return link in header.
            return(CreatedAtRoute("GetPerson",
                                  new { personFromRepo.PersonId },
                                  personFromRepo));
        }