【问题标题】:lock sql table from sql server or asp.net mvc从 sql server 或 asp.net mvc 锁定 sql 表
【发布时间】:2013-05-22 22:17:10
【问题描述】:

我正在尝试通过锁定 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 关键字的东西,但我不确定这是否会有所帮助。

【问题讨论】:

    标签: sql-server asp.net-mvc sql-server-2008 locking


    【解决方案1】:

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

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

    【讨论】:

    • 我正在这样做,但我认为在我的情况下,以原子方式执行而不依赖唯一索引引发错误会更有意义。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多