问题标签 [optimistic-concurrency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
951 浏览

sql - ProstgreSQL、MySQL 乐观并发

我有一个 Web 应用程序,用户可以在其中同时更改数据。目前,我在每个表单中都包含旧行值,并且只有在数据相同时才更新行。使用 SQLite,这是唯一的选择。这很难看,如果它可以提供更好的方法,我会考虑切换到另一个 SQL 数据库。PostgreSQL 或 MySQL 是否有隐含的行时间戳或版本号可以用来代替?

0 投票
1 回答
4374 浏览

asp.net-mvc-3 - 实体框架乐观并发异常未发生

我们有一个使用 EF4 作为其数据访问层的 ASP.Net MVC 应用程序,并且我们看到了与 OptimisitcConcurrencyExceptions 相关的意外行为,而我们认为它们应该不会被抛出。

我们已将问题简化为以下代码...

这是我们的 MVC 应用程序中发生的事情的一个相当简单的版本,但是会出现同样的问题。

当我们在第三个实体上调用 SaveChanges 时,我预计会出现异常并且没有抛出任何东西。

更有趣的是,当我们附加 SQL Profiler 时,我们看到 Version 正在 where 子句中使用,但使用的是 thirdEntities 版本值(数据库中的当前值),而不是 firstEntities 值,尽管它被立即显式设置在调用 SaveChanges 之前。SaveChanges 将 Version 重置为检索到的值而不是设置值。

在 EDMX 中,版本设置为将 StoreGeneratedPattern 设置为 Computed。

有人知道这里发生了什么吗?

0 投票
2 回答
317 浏览

database - 数据库事务设计问题

在使用乐观事务的系统中考虑以下两个 Java 伪代码块。

示例 A

示例 B

我在我们的代码中看到交易是双向进行的;我确信A是正确的。我的直觉告诉我B是错误的,但是B似乎没有什么坏处,因为commit()它在 try 块中,并且可以在发生错误的情况下被捕获并回滚。请解释B是否正确,为什么。谢谢!

编辑:所以我并没有真正得到我正在寻找的答案。我已经知道B某种程度上是“坏的”,我正在寻找的是它为什么不好;也就是说,是否存在某种可能的情况,A会在B失败的情况下工作?

-tjw

0 投票
2 回答
564 浏览

nhibernate - nHibernate 和并发检查

我想使用 UnitOfWork 模式使用 nHibernate 3 实现并发检查。

更准确地说:

  • 打开新的会话会话,
  • 在会话中加载实体,
  • 关闭会话,
  • 给用户一些时间来编辑加载实体中的数据,
  • 打开新会话,
  • 更新数据
  • 关闭会话。

我正在使用时间戳来版本实体。

这是我的映射文件

我不知道如何在会话上下文中更新实体

在 SQL 中它应该像这样工作

如果 ROWSMODIFIED = 1 则更新成功,否则如果 = 0 则 ConcurrencyException

使用 Linq2Sql 非常简单:创建版本控制列,将实体附加到新的会话上下文并尝试更新。

我怎样才能在 nHiberate 中做到这一点?是否支持?

0 投票
0 回答
690 浏览

asp.net - Asp.Net ListView ItemUpdating 在使用 UpdateItem() 时未设置 OldValues

当我尝试使用 Listview.UpdateItem 方法更新项目时,我不知道为什么没有设置 ItemUpdating eventargs 的 OldValues。

当我使用进入编辑模式然后单击“更新”命令按钮的正常过程时,总是会设置 OldValues。

似乎因为我是通过 UpdateItem 方法触发更新,所以事情的工作方式不同......

我将 ObjectDataSourde 与 ConflictDetection="CompareAllValues" 与 EF 结合使用,并且还希望使用旧值来仅更新已更改的字段。

你们知道可能是什么问题吗?

谢谢

马塞洛

0 投票
1 回答
146 浏览

linq-to-sql - Linq to Sql:更改冲突 SQL 语句

当我捕获 ChangeConflictException 时,是否可以从代码中确定失败的实际 SQL 语句?IE; 而不是检查探查器输出。

0 投票
3 回答
2601 浏览

database - 当事务在时间戳排序协议中回滚时,为什么要给它一个新的时间戳?

当事务在时间戳排序协议中回滚时,为什么要给它一个新的时间戳?为什么我们不保留旧的时间戳?

0 投票
2 回答
696 浏览

sql - 在遗留数据库上实现乐观并发

我有一个数据库,其中包含一些表以及其中的数据。我需要为所有表实现乐观并发。

我想知道什么是最好的方法。

将在应用程序端创建带有谓词的查询。

我关心的是如何存储 rowversion(timestamp) 值。

首先我想使用ora_rowscn作为 rowversion 值,但后来我意识到我必须重新创建所有表来设置ora_rowscn。也许只是添加某种时间戳列会很好,但是我将被迫为应用程序中的每次更新创建并保存一个新的时间戳值。

有任何想法吗 ?

0 投票
1 回答
2250 浏览

sql-server - 使用 NHibernate(和 Fluent NH)以优于秒的精度(而不是截断毫秒)映射日期时间类型的版本列

我有一个带有datetime-type 列的表作为版本。这是一个遗留数据库,所以我不可能将它更改为datetime2或使用不同的版本控制机制。NHibernate 类将其映射到DateTimec# 类型的属性。

我已经看到了几个问题以及有关此问题的论坛帖子和回复,但是无论我尝试过什么,NHibernate 都会将 DateTime 值的毫秒数截断。

这是我目前使用 Fluent NHibernate 所做的事情:

在我正在映射的课程中,我有:

数据库是 MS SQL 2008,Fluent NH 配置如下:

我需要什么:如何配置 Fluent NH 以使 NH 以毫秒为单位发送日期时间值的工作示例(从我在代码中看到的应该是 10 毫秒的精度)。谢谢!

0 投票
3 回答
2363 浏览

asp.net - 在实体框架中删除对象时的并发

我正在使用实体框架开发一个 Web 应用程序。我加载一个对象列表并将其绑定到转发器以显示所有项目的摘要。用户可以点击转发器中每个项目的编辑图标或删除图标。

例子:

项目 1 | 编辑 | 删除

项目 2 | 编辑 | 删除

...

使用 rowversion 列进行并发时编辑工作正常,因为记录已加载并且 ID 和 rowversion 列的值保留在隐藏的表单字段中。这些“原始”值随后可在更新时使用。

但是,如果用户单击删除记录,我从数据库中加载对象,调用 DeleteObject(),然后调用 SaveChanges()。这样做的问题是,当我加载记录时,它会获取最新的 rowversion 值,因此任何并发检查都变得无用。

如何确保在删除记录时进行并发检查?