У меня есть следующий сценарий:
Функция бизнес-логики, использующая EF Core2, проверяет, существует ли запись. Если запись не существует, она вставляется в базу данных.
У меня есть несколько потоков, вызывающих эту функцию бизнес-логики. Что происходит:
Если функция вызывается одновременно с одними и теми же параметрами, оба экземпляра проверяют, существует ли запись - и ее нет. Таким образом, оба экземпляра вставляют одну и ту же запись.
Когда context.SaveChanges()
вызывается в первом случае, все идет хорошо. Но вторая SaveChanges()
выдает исключение, потому что запись уже существует (в базе данных есть уникальный индекс).
Если я поймаю это исключение и попытаюсь вставить новое значение для UNIQUE_KEY
, оно все равно выдаст исключение, поскольку ранее добавленная сущность все еще находится на пути.
Как я могу реализовать это, чтобы избежать исключения?