Ошибка Entity Framework Core при обновлении существующей записи

В моем ASP.NET-Core Code First project я получаю следующую ошибку на SaveChangesAsync() в следующем Action Method:

Ошибка

DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded

Метод действия:

public async Task<IActionResult> UpdateWeekDay(int iWeekDay)
{
       if (ModelState.IsValid)
       {
            WeekModel oWeekModel = new WeekModel();
            oWeekModel.DayOfWeek= iWeekDay;
            _context.Update(oWeekModel);
            await _context.SaveChangesAsync();
            return View();
        }
}

Модель:

public class WeekModel
{
    [Key]
    public int WeekId { get; set; }
    public int DayOfWeek { get; set; }
}

ПРИМЕЧАНИЕ. Соответствующая таблица Weeks в базе данных SQL Server 2014 имеет WeekId as an identity column and as the PK. Более того, таблица содержит только одну запись.

ОБНОВЛЕНИЕ:

После этого сообщения от пользователя sstan я попробовал следующее в приведенном выше методе действий. Это не дает мне ошибки, но также не обновляет БД:

WeekModel oWeekModel = new WeekModel();
_context.WeekModel.Attach(oWeekModel);
oWeekModel.DayOfWeek= iWeekDay;
await _context.SaveChangesAsync();

comment
Почему вы создаете новую сущность для обновления?   -  person adem caglin    schedule 13.08.2016
comment
Вам нужно будет прикрепить вновь созданную модель, прежде чем передавать ее методу обновления. Или сделайте запрос, чтобы сначала получить его, иначе он не отслеживается   -  person Tseng    schedule 13.08.2016


Ответы (1)


Следуя советам @Tseng и @ademcaglin и этому сообщению от @sstan, я смог решить проблему следующим образом. ПРИМЕЧАНИЕ. Кредит принадлежит вышеупомянутым пользователям (моя благодарность этим пользователям):

public async Task<IActionResult> UpdateWeekDay(int iWeekDay)
{
   if (ModelState.IsValid)
   {
      WeekModel oWeekModel = _context.WeekModel.Where(s => s.DayOfWeek > 0).FirstOrDefault<CurrentYear>();
      _context.WeekModel.Attach(oWeekModel);
      oWeekModel.DayOfWeek= iWeekDay;
      await _context.SaveChangesAsync();
      return View();
   }
}
person nam    schedule 14.08.2016
comment
Вам не нужно прикреплять полученный объект. Вы можете удалить _context.WeekModel.Attach(oWeekModel). - person adem caglin; 14.08.2016
comment
@ademcaglin По вашему предложению я удалил объект, извлеченный из прикрепления, и он все еще работает. Не могли бы вы объяснить, почему здесь не нужно было прикреплять выбранный объект и когда это будет необходимо? - person nam; 14.08.2016
comment
Вам не нужно, потому что вы не создали новую сущность, вы получили ее из базы данных через DbContext. Пример в вашем вопросе необходимо прикрепить (как сказал @Tseng), потому что вы создали новый объект (не извлечен). См. также msdn.microsoft.com/en-us/data/jj592676.aspx< /а> - person adem caglin; 15.08.2016