Sql server 从sql server或asp.net mvc锁定sql表
我试图在SQLServer2008中锁定一些简单的东西(如果可能的话,也可以直接从asp.NETMVC锁定),但不确定如何处理它 我有一个表(称为users),用户名必须是唯一的。我想做一些类似的事情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
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将阻止新行。然后在代码中捕获错误。我是这样做的,但我认为在我的情况下,以原子方式执行该操作更有意义,而不是依赖于抛出错误的唯一索引。