Выбор ответа Senior EF Core обновлено
Оптимистичная конкурентность
Вопрос
Два пользователя одновременно редактируют один товар. Как EF Core предотвращает потерю обновления?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Токен конкурентности в WHERE; 0 строк даёт DbUpdateConcurrencyException. При токене конкурентности EF добавляет в WHERE условие на исходное значение токена.
Варианты ответа
- EF Core по умолчанию блокирует строку
SELECT ... FOR UPDATEпри загрузке - Токен конкурентности в
WHERE; 0 строк даётDbUpdateConcurrencyExceptionправильный ответ - Второй
SaveChangesавтоматически сольёт изменения обоих пользователей - EF Core сравнивает все столбцы строки перед каждым обновлением
Разбор
При токене конкурентности EF добавляет в WHERE условие на исходное значение токена. Если строку уже изменили, обновится 0 строк, и EF бросит DbUpdateConcurrencyException, а приложение решает: перечитать, слить или показать конфликт. Пессимистичных блокировок по умолчанию нет, автоматического слияния тоже. Без токена EF сравнивает только первичный ключ.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.