Mssql 2012 Row Locking

时间:2013-04-01 08:58:27

标签: database entity-framework

我有很多关于数据库的数据,很多用户都是通过异步JS更新这些数据。 我想防止多个用户修改db上的同一行。当用户1单击网页中的编辑行时,我想向服务器发送信号并锁定该行。因此其他用户将无法在同一行上访问编辑模式。当用户完成编辑行时,他/她将单击“确定”,将提交更新并将解锁行。我搜索谷歌这种方法,但所有的SQL锁是单一交易。有没有办法实现这个目标?我很乐意在不改变我的数据库设计的情况下解决这个问题。但如果没有没有改变的解决方案,很多工作都会等着我:)

1 个答案:

答案 0 :(得分:0)

尝试一下:http://en.wikipedia.org/wiki/Optimistic_concurrency_control

每当保存行时,会对lock_version字段进行计数。每当在该行上发生保存时,它将查看数据库上的lock_version是否与内存中保存的一样。如果版本不同,则该行已被另一个用户更改。在这里你可以做任何事情:

  1. 从数据库重新加载行并添加更改,然后重新保存
  2. 只是抛出异常并让用户处理它
  3. 如果你真的想要一些你所建议的东西,那么你需要用行上的某种标志来处理这个问题,你在用户编辑这行时就会设置它。

    1. 用户开始编辑行 - >将标志设置为true
    2. 其他用户尝试编辑该行 - > flag会阻止这个
    3. 用户结束编辑行 - >将标志设置为false
    4. 但是,这会给你带来各种各样的问题......尽量避免这种错综复杂的锁定处理,并采用像乐观锁定这样的简单方法