asp.net mvc避免重复

时间:2010-11-16 11:44:38

标签: c# asp.net-mvc linq-to-sql

我有一个Users表,其中不存在两个相同的用户,这个错误的最佳方法是什么?

我所做的是我在控制器中写了一份重复检查,但是有人对我说这不是一件正确的事。他说在数据库表上放了唯一的?我也在其他几个控制器上实现了这个功能。我应该改变吗?

2 个答案:

答案 0 :(得分:5)

尽可能在数据库级别强制执行数据约束要好得多。考虑以下情况:

大约在同一时间创建具有相同名称的用户的2个请求。

  1. 请求1检查DB以查看是否存在 - 用户没有;
  2. 不久之后,请求2检查DB以查看是否存在 - 用户没有;
  3. 请求1创建此用户。
  4. 请求2会创建一个重复的用户。
  5. 邦。一切都按照你期望的方式停止工作。
  6. 至于是否使用唯一约束,或将其作为主键,是另一个问题,并且在很大程度上取决于您的情况(因为您在此表上确实有某种主键,不是吗? ?)

答案 1 :(得分:3)

有几个地方你应该这样做。

  • 在数据库表级别:使用电子邮件作为用户名并将其标记为唯一的constrant
  • 在模型验证级别,您可以检查电子邮件并返回验证错误
  • 在客户端,您可以使用异步请求放置一些代码,当用户在文本框中输入用户名时,将实时检查重复的电子邮件或用户名

- 编辑 -

建议将所有三个用于更好的验证。不一致的数据对您的系统来说是最糟糕的事情。因为我认为,正确的数据=良好的质量

- 结束编辑 -

请注意,验证码应放在模型中,并了解如何编写可管理的OO代码,您可以看到mvc store front的示例。

希望这会有所帮助