asp.net mvc избежать дублирования - PullRequest
2 голосов
/ 16 ноября 2010

У меня есть таблица «Пользователи», в которой не может быть двух одинаковых пользователей. Как лучше всего избежать ошибок?

Что я сделал, так это то, что написал проверку на дублирование в контроллере, но кто-то сказал мне, что это неправильно.Он сказал, положить уникальный в таблице базы данных?Я реализовал это и на нескольких других контроллерах.Должен ли я изменить это?

Ответы [ 2 ]

5 голосов
/ 16 ноября 2010

Гораздо лучше применять ограничения данных на уровне базы данных, где это возможно.рассмотрим следующую ситуацию:

2 запроса на создание пользователя с тем же именем, примерно в одно и то же время.

  1. Запрос 1 проверяет БД, чтобы узнать, существует ли - пользователь не делает;
  2. Вскоре после этого запрос 2 проверяет БД на предмет наличия пользователя - нет;
  3. Запрос 1 создает этого пользователя.
  4. Запрос 2 создает дублирующего пользователя.
  5. взрыва.Все перестает работать так, как вы ожидаете.

Что касается использования уникального ограничения или использования его в качестве первичного ключа, это другой вопрос, который во многом зависит от вашей ситуации (потому что выу вас есть какой-то первичный ключ в этой таблице, не так ли?)

3 голосов
/ 16 ноября 2010

Есть несколько мест, где вы должны это сделать.

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

- редактировать -

Предлагается разместить все три для лучшей проверки. Несовместимые данные - это худшая вещь для вашей системы, чем все остальное. Потому что я думаю, что правильные данные = хорошее качество

- конец редактирования -

имейте в виду, что код проверки должен быть размещен в модели, и чтобы узнать, как написать управляемый код OO, вы можете увидеть пример mvc store front .

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...