问题标签 [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 回答
15146 浏览

asp.net-mvc - MVC3 - 将字节数组发布到控制器 - Database RowVersion

我正在开发一个 MVC3 应用程序。我的客户端 ViewModel 包含一个 SQL Server RowVersion 属性,它是一个字节 []。它在客户端呈现为对象数组。当我尝试将视图模型发布到控制器时,RowVersion 属性始终为空。

我假设控制器序列化程序(JsonValueProviderFactory)忽略了对象数组属性。

我看过这个博客,但这并不适用,因为我发布的是 JSON 而不是表单标记: http ://thedatafarm.com/blog/data-access/round-tripping-a-timestamp-field-with-ef4 -1-code-first-and-mvc-3/

我的视图像这样呈现我的视图模型:

然后我将 viewModel 发布到控制器,如下所示:

这是我在控制器中的操作:

更新:基于达林的回答。

我希望有一个更干净的解决方案,但由于 Darin 提供了唯一的答案,我将不得不添加一个自定义属性,它将我的 byte[] "row_version" 属性序列化为 Base64 字符串。当 Base64 字符串设置为新的自定义属性时,它会将字符串转换回 byte[]。下面是我添加到模型中的自定义“RowVersion”属性:

0 投票
2 回答
2687 浏览

sql-server - 用于更改跟踪问题的 SQL RowVersion 编号列

我有一种情况,我使用 RowVersion 列和 Binary(8) 列来跟踪行是否已更改。

理想情况下:

然后,该记录发生了变化。真正的问题是我找不到将两列设置为相等的好方法。如果我更新 Binary 字段,则更新查询会增加该记录的 RowVersion 字段。我已经搞砸了乐观地增加 Binary 字段,它几乎可以工作。关键是我必须将 Binary 字段增加 UPDATE 查询将影响的记录总数。关于如何暂停 rowversion 或确定在更新语句结束时使用更新语句中的值的任何想法?

为清楚起见,以下是使两个字段匹配的示例:

0 投票
2 回答
4059 浏览

sql - 行版本/时间戳是否会显着影响性能?

我计划添加到我的数据库 rowversion 中的大多数表中,以跟踪这些表中的更改。我知道添加它会影响查询的性能。

有谁知道它是否会稍微影响性能(慢几个百分点)或者我不应该将 rowversion 添加到许多表中,因为它会使 DB 慢得多。

0 投票
10 回答
7968 浏览

c# - 如何根据行版本/时间戳值查询 Code First 实体?

我遇到了这样一种情况,即与 LINQ to SQL 配合得很好的东西在实体框架中似乎非常迟钝(或者可能是不可能的)。具体来说,我有一个包含rowversion属性的实体(用于版本控制和并发控制)。就像是:

我希望能够将实体作为输入,并找到所有其他最近更新的实体。就像是:

现在,在数据库中这将起作用:两个rowversion值可以毫无问题地相互比较。我在使用 LINQ to SQL 之前做过类似的事情,它映射rowversionSystem.Data.Linq.Binary,可以进行比较。(至少在表达式树可以映射回数据库的范围内。)

但是在 Code First 中,属性的类型必须是byte[]. 并且两个数组不能用常规的比较运算符进行比较。是否有其他方法可以编写 LINQ to Entities 可以理解的数组比较?或者将数组强制转换为其他类型,以便比较可以通过编译器?

0 投票
2 回答
1428 浏览

sql-server - 是否可以使用实体框架将 SQL Server 的 rowversion 类型映射到比 byte[] 更友好的东西?

当我在存储模型中声明一个 SQL Server 行版本字段并让实体框架进行其默认映射时,行版本字段被映射到一个字节数组。

是否可以将其映射到更友好的类型(这将允许从 .NET 端表达相等和比较运算符)?鉴于 rowversion 的底层类型是 binary(8),我相信可以将其映射到 64 位整数。

以下是当前使用的属性定义:

固态硬盘:

CSDL:

0 投票
6 回答
18781 浏览

c# - 如何使用 C# 从 sql server 读取时间戳类型的数据?

我在 .NET 中得到这样的结果:

结果是一个字节数组[0]= 0,[1]=0,[2]=0,[3]=0,[4]=0,[5]=0,[6]=30,[7]=138,但 SQL Server 中的结果是0x0000000000001E8A

如何"0x0000000000001E8A"在 .NET 中获得价值?

0 投票
1 回答
1324 浏览

c# - 实体框架按预定义顺序更新行版本

我正在使用 C#、EF 和 SQL Server,并且很少有具有父子关系的表。有超过 2 个,但在此示例中,为简单起见,我将仅使用 2 个。

表书

表页

当任何页面/页面更新时,我需要DateModified在 Book 表中更新。

我们RowVersion用来跟踪更改,因为它具有独特的价值,我希望始终能够通过简单地执行以下操作来获得每本书的最新更改

但为了做到这一点,我需要确保RowVersioninBook表总是在RowVersionsin之前更新Pages

在我的 EDM 层中,我目前有这样的东西:

这样做会导致页面首先更新,并且在事务提交后它的 RowVersion 也会首先更新。这不是我需要的。

问题,如果我将OnPageChanged()改为处理OnPropertyChanging事件 - 这会保证一致性吗?是否OnPropertyChanged决定了更新在 EF 生成的 sql 中发生的顺序?对于这个案例还有什么其他建议吗?

0 投票
1 回答
1853 浏览

sql - SQL Server 中行版本控制的时间戳与 Int 列

我想在我的 SQL Server 数据库中的一些表上应用数据并发。为了实现行版本控制,我正在考虑添加一个integer名为 的列RowVersion,并在更新行时增加该列的行值。

还有另一种选择:使用timestamp列。当您使用timestamp列时,SQL Server 会在行更新时自动创建一个唯一值。

我想知道这些选项的优点。我认为插入int列来存储行版本是更通用的方式,而插入timestamp列是 SQL Server 特定的。

更重要integer的是,行版本的值比timestamp列更易于阅读。

我想知道integer为行版本字段选择列的其他优点或缺点。

谢谢。

0 投票
3 回答
5643 浏览

timestamp - rowversion 在 SQL Server 2008 R2 中不是有效的数据类型吗?

在 Microsoft SQL Server 2008 R2 中不是rowversion有效的数据类型?


奖金喋喋不休

我正在尝试向表中添加一rowversion列:

在此处输入图像描述

但是当我尝试离开“数据类型”列时,SQL Server Management Studio 抱怨

无效的数据类型。

在此处输入图像描述

并坚持让我选择不同的数据类型:

在此处输入图像描述

rowversionrowversion不是有效的数据类型时,如何创建列?


奖金观看

在此处输入图像描述

奖金阅读

行版本 (Transact-SQL)

timestamprowversion数据类型的同义词,受数据类型同义词的行为影响。在 DDL 语句中,尽可能使用rowversion而不是timestamp 。有关详细信息,请参阅数据类型同义词 (Transact-SQL)

时间戳语法已弃用。此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

额外的奖金喋喋不休

0 投票
1 回答
183 浏览

asp.net - ASP.NET OLTP App - 创建新版本的记录

我的问题与这个问题相同- 但需要补充一点。我的问题是我的网络应用程序的用户被允许创建记录的新版本。记录的每个新版本都会在 50 个其他相关表中创建相应的“新版本”,以记录对该特定版本的单独更改。这种包含大约 50 个表的新版本的创建在事务中运行(以在发生错误时回滚所有更改)。很多时候,这个过程很慢,这是可以理解的,因为“冗长的事务”涉及太多的表“插入”。

我正在寻找更好的解决方案/设计来实现这样的场景。

  1. 有没有更好的方法来维护同一记录的“版本”,特别是当它在多个表中创建太多重复项时
  2. 我觉得设计本身并不好,因为“每一行版本”都插入了太多记录,但至少想解决眼前的问题,即“冗长的事务”——这有时会导致延迟。可能没有出路,但仍然想问 - 如果我不将“版本控制”放在事务中,是否有更好的方法在发生错误时回滚(因为事务似乎阻止了其他 OLTP查询 - 由于在所有主表上插入新版本)

版本控制查询现在运行大约 10 秒,但有时会变得更糟。任何想法表示赞赏