Выбор ответа Senior EF Core обновлено

Оптимистичная конкурентность

Вопрос

Два пользователя одновременно редактируют один товар. Как EF Core предотвращает потерю обновления?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Токен конкурентности в WHERE; 0 строк даёт DbUpdateConcurrencyException. При токене конкурентности EF добавляет в WHERE условие на исходное значение токена.

Варианты ответа

  1. EF Core по умолчанию блокирует строку SELECT ... FOR UPDATE при загрузке
  2. Токен конкурентности в WHERE; 0 строк даёт DbUpdateConcurrencyExceptionправильный ответ
  3. Второй SaveChanges автоматически сольёт изменения обоих пользователей
  4. EF Core сравнивает все столбцы строки перед каждым обновлением

Разбор

При токене конкурентности EF добавляет в WHERE условие на исходное значение токена. Если строку уже изменили, обновится 0 строк, и EF бросит DbUpdateConcurrencyException, а приложение решает: перечитать, слить или показать конфликт. Пессимистичных блокировок по умолчанию нет, автоматического слияния тоже. Без токена EF сравнивает только первичный ключ.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.