C#-SQL Server-记录锁定



我想征求建议,解决以下问题的建议方法是什么,这样我就可以进行调查并阅读正确的信息。用户可以从下拉菜单中选择一个项目,然后按下编辑按钮来更改所选项目的数据。此时,我需要为其他用户锁定记录(首选的方式是什么?(。若另一个用户试图编辑同一项目,则显示一条消息,表明该项目已被其他用户锁定。处理应用程序/电脑崩溃以解锁记录(最佳解决方案?(

问候

Piotr

当用户编辑行时,应该使用乐观并发,而不是服务器端锁定。在乐观并发性下,客户端使用充当"更新"的附加列来过滤更新或删除;并发令牌";以确保该行没有被任何其他用户更新。例如

update T set a = @a, b = @b
where Id = @id and RowVersionColumn = @rowversion;
select @@rowcount RowsAffected;

如果更新或删除影响了零行,则客户端知道其他用户已经更改了该行,他们可以重新加载当前版本并决定是否重新提交更改。

在SQL Server中,rowversion列通常用作并发令牌。

参见,例如EF Core 中的并发冲突处理

最新更新