0

我正在尝试通过锁定 sql server 2008(或直接从 asp.net mvc 如果可能)做一些简单的事情,但不确定如何处理它。

我有一个表(称为用户),用户名必须是唯一的。我想做一些事情

var myuser = db.users.FirstOrDefault(u => u.username == username);
if(myuser == null)
{
  myuser = new user(username);
  db.users.add(myuser);
}
return myuser;

我需要它是原子的,这样没有人可以在其他人之后尝试插入用户 foo 。如果这可以从 asp.net mvc 实现,那将是完美的,但如果不能,我需要直接在存储过程中进行。在存储过程中锁定正确的方法吗?如果是这样,我是否需要锁定整个用户表?在网上查看时,我也看到了带有 merge 关键字的内容,但我不确定这是否会有所帮助。

4

1 回答 1

1

如果您有高并发重复帐户,可以在 FirstOrDefault 调用和 users.add 调用之间创建

如果在用户名上添加唯一索引,sql 将阻止新行。然后在代码中捕获错误。

于 2013-05-22T22:31:52.880 回答