【问题标题】:Lock all tables for editing for all other users when one user is editing data (in SQL Server) in asp.net当一个用户在 asp.net 中编辑数据(在 SQL Server 中)时,锁定所有表以供所有其他用户编辑
【发布时间】:2022-06-10 22:06:14
【问题描述】:

我是 ASP.NET 的新手。我有一个 MVC Web 应用程序从 SQL Server 中的三个表访问数据。我有一个要求,如果一个用户正在编辑一个表中的数据,那么不应允许其他用户编辑任何数据。我尝试在 SQL Server 中使用带有标志的表来编辑根据用户活动设置和重置的设置。但这似乎并不可靠。有人可以提出更好的选择来实现这一目标。

【问题讨论】:

  • 行被数据库读取后是否需要锁定?还是只需要防止更新覆盖其他用户的更新而不让他们知道?
  • 例如,如果我要更改一个表中的数据,那么其他用户应该无法修改任何表。在我当前的解决方案中,如果一个用户正在编辑,我会阻止为其他用户加载表单,方法是使用 db 中的标志。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: c# asp.net-mvc asp.net-core pessimistic-locking


【解决方案1】:

我相信可能有更好的方法来处理您所处的整个情况,但建议您将拥有一个包含锁定到期时间的 datetime 列而不是标志。读取记录时,如果当前时间早于到期时间,则不会加载表单。如果当前时间在过期之后;读取数据,加载表单,并在可序列化事务中更新过期时间。最后,当用户完成更新时,将过期时间设置为当前时间。这样,更新标志的错误不会无限期地锁定记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多