EF дает ошибку при вставке и обновлении записи дочерней таблицы - PullRequest
0 голосов
/ 23 марта 2020

Внутри сюжетного объекта у меня есть рейтинг дочернего объекта. У меня возникает проблема при вставке нового рейтинга.

Сообщение об ошибке: «Предполагается, что операция с базой данных затронет 1 ряд (ы), но фактически затронет 0 ряд (ы) Возможно, данные были изменены или удалены с момента загрузки объектов. "

введите описание изображения здесь

   public async Task WriteRatingForStory(int storyId, int userId, int 
      score)
    {
        // Get the story that was rated
        var story = await _dbContext.Stories.FirstOrDefaultAsync(story => story.Id == storyId);

        // Updating thestory with the new rating
        story.WriteRating(userId, score);

        //_dbContext.Stories.Update(story);

        // Save the updated story to the database
        var saved = false;
        while (!saved)
        {
            try
            {
                // Attempt to save changes to the database

                _dbContext.SaveChanges();
                saved = true;
            }
            catch (DbUpdateConcurrencyException ex)
            { 
            }
         }
      } 

   public void WriteRating(int userId, double newRating)
       {

            Ratings.Add(new Rating() { StoryId = this.Id, Score = newRating, UserId = userId });
            AverageRating = ((AverageRating * NumberOfRatings - 1) + newRating) / NumberOfRatings;

    }

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Вы работаете в асинхронном режиме, поэтому он не ожидает фиксации, необходимой для его синхронизации c

0 голосов
/ 23 марта 2020

Обновите модель, изменив ее состояние, затем сохраните изменения

_dbContext.Entry(story).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
...