Code Atom Ответов: 0

Как сделать так, чтобы пользователь создавался в системе только один раз ?


Я столкнулся с проблемой, у меня есть API, который отправляет запрос со списком адресов электронной почты, теперь какая система проверяет каждый адрес электронной почты из базы данных, если он существует, то это нормально, мы используем userid, иначе мы создаем нового пользователя.

Проблема возникает, когда мы отправляем несколько запросов с одним и тем же списком адресов электронной почты, то это вызывает исключение.потому что я установил уникальное ограничение на столбец электронной почты в БД.

Что я уже пробовал:

Я думаю, что мне нужно создать одноэлементный контекст БД, и этот контекст только создает пользователя и возвращается к вызывающей функции.

Dave Kreskowiak

В вашем вопросе мало смысла.

Вы спрашиваете, как проверить, есть ли адрес электронной почты в вашей базе данных пользователей, прежде чем пытаться добавить его?

Если вы попытаетесь добавить адрес электронной почты сейчас, вы получите исключение, потому что адрес электронной почты уже существует? Затем обработайте исключение и верните пользователя обратно на страницу, чтобы выбрать новый адрес электронной почты и включить сообщение об ошибке на странице, где говорится, что этот адрес уже используется.

Code Atom

вариант использования заключается в том, что сначала проверьте, существует ли пользователь в БД или нет, если нет, то создайте новый, а затем используйте существующий, теперь два потока параллельно пытаются создать пользователя в своей собственной области потока, и они пытаются зафиксировать свои изменения, что в основном вызывает исключение.

Dave Kreskowiak

А исключение есть?

Code Atom

Исключение прерывания транзакции

Code Atom

Нужно ли добавлять версию строки в пользовательскую таблицу для параллелизма? и я использую сериализуемую изоляцию в транзакции.

Dave Kreskowiak

Пытаются ли оба потока создать один и тот же адрес электронной почты?

Code Atom

да

Dave Kreskowiak

Ладно, я уже сказал тебе, что делать. Обработайте исключение и сообщите клиенту, что этот адрес электронной почты уже использовался.

Вы ведь знаете, для чего нужен блок try/catch, верно?

Code Atom

У меня есть API, когда я вызываю этот API параллельно, он создает пользователя с адресом электронной почты несколько раз.

Dave Kreskowiak

Не видя вашего кода API, невозможно сказать вам, что вы сделали не так.

0 Ответов