我有一个 ASP.NET MVC 站点,并且有一个网页,您可以在其中查看订单列表。
您可以双击一行,这将打开一个详细信息页面(授权用户将看到一个包含大量文本框、文本区域、单选按钮等的大表单)。
最初只有一个有权编辑订单的人,所以没有问题,但现在用户正在组建团队,并且在某些情况下有几个人(10+)有权编辑同一订单,所以他们可能有详细网页同时上线。
现在存在两个问题。
人们现在提示他们所做的更改立即被覆盖,因为其他人同时编辑相同的订单,这造成了很多困惑。
如果人们整天离开详细信息页面,他们可能会看到非常旧的 View 版本(因为其他多个人可能全天都保存了更改)。没有任何信息通知他们他们的页面版本已过期,然后应该在编辑之前刷新页面。
我正在寻找有关处理上述两个问题的最佳方法的建议。
此外,是否存在可以利用的某些库或模式(而不是从头开始构建某些东西)。
最佳答案
关于并发,您有两种选择:
悲观并发(锁定)。
您需要实现一个锁定系统,在只读或更新/删除上发出锁定
乐观并发
将
LastUpdated
时间戳列添加到表中,并在更新/删除时在WHERE
中使用它(与 ID 一起)。如果 0 行受到影响,则您正在尝试更新/删除过时的数据。
阅读this关于如何在 ASP.NET MVC 中使用 Entity Framework 处理此问题.
您还可以实现一个系统来通知同一页面上的用户。一种方法是使用SignalR并创建一个 group每页。您可以实时广播值的变化,甚至加载新值。
关于c# - 在 ASP.NET MVC 中,如何避免或提醒人们编辑相同的表单或尝试编辑过时的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766786/