Редактирование записи путем доступа к ней - PullRequest
1 голос
/ 10 апреля 2020

Я обновляю регистр базы данных, но перед обновлением я извлек тот же регистр.

Из-за этого я получаю следующую ошибку:

Экземпляр типа сущности 'Позиция' не может быть отслежен, потому что другой экземпляр с тем же значением ключа для {'Id'} уже отслеживается. При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа. Подумайте об использовании DbContextOptionsBuilder.EnableSensitiveDataLogging для просмотра конфликтующих значений ключа.

Это код:


            [FunctionName(nameof(PostUpdatePosition))]
            public ActionResult PostUpdatePosition([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "postUpdatePosition")]HttpRequestMessage request)
            {
                PositionViewModel viewModel;

                try
                {
                    // Received json 
                    viewModel = JsonConvert.DeserializeObject(request
                                    .Content
                                    .ReadAsStringAsync()
                                    .Result);

                    var clientId = <i>positonRepository.GetById</i>(<b>viewModel.Id</b>).ClientId;

                    // here the error appears. ▼
                    <i>positonRepository.Update</i>(new Domain.Entities.Position
                    {
                        Id = <b>viewModel.Id</b>,
                        Description = viewModel.Description,
                        Active = viewModel.Active,
                        ClientId = clientId
                    });

                    positonRepository.SaveChanges();
                }
                catch (Exception ex)
                {
                    return StatusCode(StatusCodes.Status500InternalServerError,
                        new EasyEpiJson()
                        .GetInternalServerError(ex));
                }

                return Ok(new EasyEpiJson().GetOK(viewModel));
            }
        }

Как это исправить?

1 Ответ

1 голос
/ 10 апреля 2020

Вы пытаетесь обновить позицию, которая не отслеживалась EF. Вместо этого сначала получите объект, который вы хотите обновить, обновите поля и введите sh, передав этот объект в хранилище:

            var position = positonRepository.GetById(viewModel.Id);

            position.Description = viewModel.Description;
            position.Active = viewModel.Active;

            positonRepository.Update(position);
            positonRepository.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...