Когда мы передаем нашему DbContext объект, значения которого не изменились, и пытаемся выполнить Update
, мы получаем 500 internal server error
.
Пользователь может открыть диалоговое окно, чтобы отредактировать запись, изменить значение, изменить его обратно и затем отправить запись в базу данных. Также мы предоставляем функцию резервного копирования и восстановления, и когда записи будут восстановлены, некоторые из них не изменятся с момента резервного копирования.
У меня сложилось впечатление, что PUT
удалит и заново создаст запись, поэтому я не чувствовал, что возникнет проблема.
Например, проверив, существует ли Activity
, мой ActivityController
выглядит следующим образом:
var activityEntityFromRepo = _activityRepository.GetActivity(id);
// Map(source object (Dto), destination object (Entity))
_mapper.Map(activityForUpdateDto, activityEntityFromRepo);
_activityRepository.UpdateActivity(activityEntityFromRepo);
// Save the updated Activity entity, added to the DbContext, to the SQL database.
if (await _activityRepository.SaveChangesAsync())
{
var activityFromRepo = _activityRepository.GetActivity(id);
if (activityFromRepo == null)
{
return NotFound("Updated Activity could not be found");
}
var activity = _mapper.Map<ActivityDto>(activityFromRepo);
return Ok(activity);
}
else
{
// The save failed.
var message = $"Could not update Activity {id} in the database.";
_logger.LogWarning(message);
throw new Exception(message);
};
Мой ActivityRepository
выглядит следующим образом:
public void UpdateActivity(Activity activity)
{
_context.Activities.Update(activity);
}
Если какое-либо из полей изменилось, мы не получим ошибку. Нужно ли проверять каждую запись на равенство перед PUT
? Кажется ненужным.
Возможно, я упустил что-то очевидное. Любые предложения очень приветствуются.