问题标签 [rowversion]

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 投票
2 回答
3816 浏览

c#-4.0 - rowVersion 在 Entityframe 工作中被映射到 byte[8],但是在手动转换时它是 byte[18]

rowVersion从数据库中获取byte[8]

现在,如果我手动执行此操作:

这给了我byte[18],当我将它转换为它时,Int64它给了我不同的价值。

我没有得到这个。

我想rowVersion作为参数传递给WebApiget方法。由于Byte[]不允许,所以我将其作为字符串传递

更新:

不明白为什么这个不起作用。我们基本上是在比较 long 和 long

0 投票
2 回答
361 浏览

sql-server - 需要帮助了解有关 SQL Server 行版本的示例吗?

在阅读此示例之前,我可以自己理解 rowversion,它反映了记录上最后更新的时间戳。我想它的用法是这样的:首先读取一条记录后,应该达到rowversion列的值。然后在更新该记录之前,应根据从数据库中获取的当前 rowversion 值(在更新前的时间)检查本地存储的 rowversion 值,如果它们不相等,则意味着另一个用户和当前应用程序进行了一些更新应该用自己的策略来处理这种并发情况。

但是,我认为以下示例使问题过于复杂,或者甚至可能是错误的或解释不善(因此会导致混淆):

我注意到myValue这里,它被设置为2并在 WHERE 子句中用于检查RV列。据我了解,rowversion 列显然是RV,但随后它解释了这一点:

myValue 是表示您最后一次读取该行的行的 rowversion 列值。此值必须替换为实际的 rowversion 值

我认为myValue这里与rowversion没有任何关系,它应该被视为用户数据。所以有了这样的解释,MyTest表有 2 个 rowversion 列?whilemyValue显然被声明为int?

我能想到的一种可能性是myValue在 WHERE 条件下的理解不同(这意味着它不是myValueSET 子句中的),它可能只是一个占位符,例如RV之前读取记录时的读取值。只有这种可能性对我来说才有意义。

所以据我了解,这个例子应该是这样的:

我以前听说过,timestamprowversion对我来说相当新,一旦我尝试找到更多关于它的信息,我发现这个例子让我很困惑。你对此有什么想法?还是我根本不明白 rowversion 的一些神秘用法?谢谢。

0 投票
0 回答
110 浏览

sql-server-2008 - rowversion 列的值何时更新?

如果我有一个带有 rowversion 列的表,它会按如下方式更新:

如果有人用 WITH(NOLOCK) 查询表会发生什么?查询结果是否有可能是“Bob”(旧值)和“EFGH”(新行版本)?

本质上,我要问的是 rowversion 什么时候真正得到更新?是否可以保证 rowversion 列在所有其他列都更新后总是会更新?

0 投票
2 回答
7700 浏览

mysql - MySQL 是否具有与 SQL Server 行版本等效的功能?

我正在将 SQL Server 数据库架构迁移到 MySQL。SQL Server 上的某些表具有 rowversion 类型的列。这是一个整数值,在第一次插入行时设置,然后在每次更新行的任何列时再次设置。该数字只会增加。

我们利用它来检查并发问题。因此,当插入到服务器时,我们可以检查传入值是否与当前存储的值不同。如果是这样,那么自导致此插入的读取以来,该行已被更新。然后我们可以拒绝更新,因为它基于过时的值。乐观并发。

在 MySQL 中是否有一个等价物可以为我们做同样的事情?

0 投票
0 回答
42 浏览

c# - 为什么 null rowversion 成员会破坏 DataContext.Attach()?


关于这个问题被标记为“重复”的注意事项:Linq 行中的问题未找到或更改不同,我的问题是关于触发“未找到或更改行”消息并正在寻求解决方案的特定场景。

此外,该问题的答案对我的问题没有用,因为我的方案已经实现了那里建议的“最小工作单元”原则。


在我的 Web 服务中,我试图将来自客户端应用程序的 LINQ to SQL 实体附加到我的 DataContext 中,如下所示:

LINQ to SQL 能够执行此操作的前提条件是 MyEntity 将属性映射到 DB 表中的 ROWVERSION 列。就我而言,我将此属性称为 RowVersion。

如果来自客户端的 MyEntity 实例将 RowVersion 设置为 null ,那么当我调用context.SubmitChanges()声明时System.Data.Linq.ChangeConflictException

未找到或更改行。

为什么会发生这种情况?无论客户端应用程序更改 RowVersion 的值,我如何才能防止这种情况发生?

我注意到的一件事是,如果我从上下文中获取“旧”实体,然后将其 RowVersion 值分配给新实体,则可以避免异常。这是正确的做法吗?为什么?

0 投票
0 回答
167 浏览

.net - 如何在 MS-SQL 中禁用行版本检查

我在 MS-SQL 数据库上使用实体框架。我正在实现一个 PUT Web 端点来更新“响应集”。

如果调用者指示 forceSave = true,即使 RowVersion 不匹配,我也想破坏记录。

这是我的代码,但它不起作用....

大多数情况下它有效!但是,有时我会DBConcurrencyExceptionSaveChanges(). 我认为这是因为存在竞争条件。在我用另一个进程读取数据库之后FirstOrDefault但在我用另一个进程写入数据库之前SaveChanges可能会更新行并更改 RowVersion!有什么方法可以禁用RowVersion 检查?

我考虑过使用事务开始/结束,但显然这无济于事。

我想写一个循环,这样如果我得到 DBConcurrencyException,那么它会再次读取 RowVersion,并尝试再次写入......直到成功......但是天哪,感觉很糟糕。

0 投票
0 回答
229 浏览

c# - 删除并重新插入后行版本不匹配

我有一个带有 rowversion 列的表。

我正在通过以下查询获取数据

获取数据后,我将使用以下基于 rowversion 的查询更新状态

用于调用选择存储过程的 C# 代码

用于调用更新存储过程 Update_Events 的 C# 代码

但更新只是第一次发生。如果我删除该行并再次插入它,然后如果我在存储过程(选择和更新)之上运行,我将无法更新状态,因为 rowversion 与 DB Value rowVersion 不匹配。

我正在使用实体框架对象上下文 ExecuteFunction 执行更新存储过程。

我不确定我们用来将实体映射到域模型的 EF 或 Auto mapper 是否存在问题。

如果有人帮助我确定问题,我将不胜感激?

如果您需要任何进一步的信息,请告诉我。

0 投票
1 回答
112 浏览

entity-framework - EF 4.1.3 为并发实现 Rowversion 不起作用

我有一个 BaseEntity 类,它包含一个名为 stamp、id 和 state 的字节数组,每个实体都从它继承我将 stamp 映射到

这是在 BaseEntityConfiguration 中设置的,设置如下

映射是这样完成的

数据库有 Stamp ROWVERSION NOT NULL;在表 EntityA 上,我有处理 DbUpdateConcurrencyException 的代码,但是即使邮票不同,这也不会被捕获此外,我期望的 Stamp 字段上也没有 where 子句

如您所见,没有 where 语句,我也从设置了法线映射的情况下尝试了它,但仍然得到相同的结果

**我发现问题是 EF 正在获取最新的 Rowversion 而不是传入的,我该如何阻止它。**

0 投票
0 回答
142 浏览

sql-server - How to replicate SQL Server rowversion behaviour for some fields only

SQL Server version 10.50.4000.

I have a table:

I want to add a field that will work exactly like a rowversion field, except:

  1. It must update only when last_visited is changed.
  2. It needn't be unique on the database but must be unique on the table.

How can I do this?

0 投票
1 回答
1467 浏览

sql - 时间戳列上的 LIKE 运算符,SQL Server

如何LIKE在具有时间戳(行版本)数据类型的列上使用运算符?

以下是我尝试过但没有运气的查询。

此外,我不能将单引号与时间戳值一起使用。

我想使用LIKE运算符找到行版本控制的模式。使用CAST我无法找到模式。

任何想法 ?

谢谢,