Пример #1
0
        public async Task <ActionResult> UpdatePetAsync(Guid petId, JsonPatchDocument <PetDTO> patchDocument)
        {
            // Ensure pet exists.
            var exists = await _familyDemoAPIv2Repository.PetExists(petId);

            if (!exists)
            {
                return(NotFound());
            }

            var petFromRepo = _familyDemoAPIv2Repository.GetPet(petId).Result; // Obtain record via DbContext query and store in entity.
            var petToPatch  = _mapper.Map <PetDTO>(petFromRepo);               // Map populated entity to DTO.

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

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

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

            // Return link in header.
            return(CreatedAtRoute("UpdatePetAsync",
                                  new { petFromRepo.PetId },
                                  petFromRepo));
        }