我有一个系统,我想在尝试编辑当前编辑过的记录时向用户显示警告。如果是这种情况,用户将无法保存记录,只能查看记录。
我有一个想法是使用某种类来监控已编辑的记录的活动等,但是这种接触有点过分了。 我的另一个问题是,如果浏览器崩溃或关闭计算机会影响页面状态,该怎么办呢。
另一个想法是使用上次更新的时间戳,但这也看起来不行,因为记录的更新方式。
有没有人对我如何实现这样的事情有任何想法或资源。没有代码是必要的。
根据评论我添加了这些额外的细节。 数据库是SQL Server 2008 asp.net 3.5 一条记录可以是数据库的许多部分,例如,预订表会话表和中断表中的一行。
用户将查看需要预订的会话列表选择预订并填写预订表格进行预订。想要停止的是其他人试图在同一时间或在其他人进行预订时进行相同的预订。
答案 0 :(得分:2)
实际上,我在SQL数据库中维护了一个Edit
(查找)表,其中包含4个字段UserID, Action, EntityID and Datestamp
,并链接到每个关联的页面和可编辑的项目。
因此,例如,如果用户在编辑Foo网页上并单击edit
链接,程序将执行Edit
表的查找,如果没有其他人正在编辑记录, insert,即:4, 'Edit Foo', 123, GETUTCDATE()
其中123是正在编辑的Foo
的ID。
此过程还有许多其他功能,例如,如果用户处于编辑模式一段时间,记录会自动从表中删除,并且该项目将再次可编辑。
但是,该解决方案在高使用环境中对我们非常有效。我希望你明白这一点。
答案 1 :(得分:0)
查看optimistic/pessimistic concurrency in ADO.NET的MSDN。
悲观并发涉及将数据源的行锁定到 防止其他用户以影响该方式的方式修改数据 当前用户。在悲观模型中,当用户执行操作时 导致锁定被应用,其他用户无法执行操作 在锁拥有者释放它之前会与锁冲突。 该模型主要用于存在沉重的环境 争用数据,以便用锁保护数据的成本是 如果并发,则低于回滚事务的成本 冲突发生。
相比之下,使用乐观并发的用户不会锁定行 读它的时候。当用户想要更新行时,应用程序 必须确定另一个用户是否已更改该行 读。乐观并发通常用于具有的环境 低争用数据。乐观并发可以提高性能 因为不需要锁定记录和锁定记录 需要额外的服务器资源另外,为了维护 记录锁,与数据库服务器的持久连接是 需要。因为在乐观并发中不是这种情况 模型,与服务器的连接可以免费提供大量服务 客户在更短的时间内。
在乐观并发模型中,违规被认为具有 如果在用户从数据库接收到另一个值之后发生 user在第一个用户尝试修改之前修改该值 它。
测试乐观并发冲突 有几种技术可用于测试乐观并发 违反。一个涉及在表中包含时间戳列。 数据库通常提供可用于的时间戳功能 确定上次更新记录的日期和时间。运用 这种技术,时间戳列包含在表中 定义。每当记录更新时,时间戳都会更新 反映当前的日期和时间。在乐观的考验中 并发冲突,timestamp列与any一起返回 查询表的内容。尝试更新时, 将数据库中的时间戳值与原始时间戳进行比较 包含在修改行中的值。如果匹配,则更新为 执行并使用当前时间更新时间戳列 反映更新。如果它们不匹配,则乐观并发 发生了违规行为。
另一种测试乐观并发冲突的技术 是验证一行中的所有原始列值是否仍然匹配 那些在数据库中找到的......