Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从sql server或asp.net mvc锁定sql表_Sql Server_Asp.net Mvc_Sql Server 2008_Locking - Fatal编程技术网

Sql server 从sql server或asp.net mvc锁定sql表

Sql server 从sql server或asp.net mvc锁定sql表,sql-server,asp.net-mvc,sql-server-2008,locking,Sql Server,Asp.net Mvc,Sql Server 2008,Locking,我试图在SQLServer2008中锁定一些简单的东西(如果可能的话,也可以直接从asp.NETMVC锁定),但不确定如何处理它 我有一个表(称为users),用户名必须是唯一的。我想做一些类似的事情 var myuser = db.users.FirstOrDefault(u => u.username == username); if(myuser == null) { myuser = new user(username); db.users.add(myuser); } r

我试图在SQLServer2008中锁定一些简单的东西(如果可能的话,也可以直接从asp.NETMVC锁定),但不确定如何处理它

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

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

我需要它是原子的,这样就没有人可以在别人插入用户foo之后再尝试插入用户foo。如果这可以从asp.NETMVC实现,那将是完美的,但如果不能,我将需要直接在存储过程中实现。在存储过程中锁定是正确的方法吗?如果是,我是否需要锁定整个users表?我在联机查看时也看到了一些带有merge关键字的内容,但我不确定这是否有帮助。

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


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

我是这样做的,但我认为在我的情况下,以原子方式执行该操作更有意义,而不是依赖于抛出错误的唯一索引。