При обновлении свойств сущности EF Core по умолчанию собирает все изменения в одну транзакцию, которая при выполнении dbContext.SaveChanges() либо применяется целиком, либо полностью откатывается в случае ошибки.
Обычно паттерн работы с сущностями выглядит так: достали из базы, обновили свойства, сохранили результат.
Для примера представим, что наша сущность - это заказ, у которого есть статус: Тогда обработчик изменения статуса заказа будет выглядеть примерно так: При выполнении последней строки в БД пойдёт запрос, обновляющий свойство Status у сущности, примерно такой: Проблема Что будет, если два пользователя системы одновременно вызовут этот метод для одного и того же заказа, но указав разный целевой статус? Оба запроса будут обрабатываться в разных потоках, оба достанут order со статусом New, потом обновят значение статуса на желаемое (в одном потоке на Canceled, а в другом на Done), оба сохранят свои изменения, и завершатся успехом.
Но какой статус в итоге будет у нашего зак