问题标签 [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.
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”属性:
sql-server - 用于更改跟踪问题的 SQL RowVersion 编号列
我有一种情况,我使用 RowVersion 列和 Binary(8) 列来跟踪行是否已更改。
理想情况下:
然后,该记录发生了变化。真正的问题是我找不到将两列设置为相等的好方法。如果我更新 Binary 字段,则更新查询会增加该记录的 RowVersion 字段。我已经搞砸了乐观地增加 Binary 字段,它几乎可以工作。关键是我必须将 Binary 字段增加 UPDATE 查询将影响的记录总数。关于如何暂停 rowversion 或确定在更新语句结束时使用更新语句中的值的任何想法?
为清楚起见,以下是使两个字段匹配的示例:
sql - 行版本/时间戳是否会显着影响性能?
我计划添加到我的数据库 rowversion 中的大多数表中,以跟踪这些表中的更改。我知道添加它会影响查询的性能。
有谁知道它是否会稍微影响性能(慢几个百分点)或者我不应该将 rowversion 添加到许多表中,因为它会使 DB 慢得多。
c# - 如何根据行版本/时间戳值查询 Code First 实体?
我遇到了这样一种情况,即与 LINQ to SQL 配合得很好的东西在实体框架中似乎非常迟钝(或者可能是不可能的)。具体来说,我有一个包含rowversion
属性的实体(用于版本控制和并发控制)。就像是:
我希望能够将实体作为输入,并找到所有其他最近更新的实体。就像是:
现在,在数据库中这将起作用:两个rowversion
值可以毫无问题地相互比较。我在使用 LINQ to SQL 之前做过类似的事情,它映射rowversion
到System.Data.Linq.Binary
,可以进行比较。(至少在表达式树可以映射回数据库的范围内。)
但是在 Code First 中,属性的类型必须是byte[]
. 并且两个数组不能用常规的比较运算符进行比较。是否有其他方法可以编写 LINQ to Entities 可以理解的数组比较?或者将数组强制转换为其他类型,以便比较可以通过编译器?
sql-server - 是否可以使用实体框架将 SQL Server 的 rowversion 类型映射到比 byte[] 更友好的东西?
当我在存储模型中声明一个 SQL Server 行版本字段并让实体框架进行其默认映射时,行版本字段被映射到一个字节数组。
是否可以将其映射到更友好的类型(这将允许从 .NET 端表达相等和比较运算符)?鉴于 rowversion 的底层类型是 binary(8),我相信可以将其映射到 64 位整数。
以下是当前使用的属性定义:
固态硬盘:
CSDL:
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 中获得价值?
c# - 实体框架按预定义顺序更新行版本
我正在使用 C#、EF 和 SQL Server,并且很少有具有父子关系的表。有超过 2 个,但在此示例中,为简单起见,我将仅使用 2 个。
表书
表页
当任何页面/页面更新时,我需要DateModified
在 Book 表中更新。
我们RowVersion
用来跟踪更改,因为它具有独特的价值,我希望始终能够通过简单地执行以下操作来获得每本书的最新更改
但为了做到这一点,我需要确保RowVersion
inBook
表总是在RowVersions
in之前更新Pages
。
在我的 EDM 层中,我目前有这样的东西:
这样做会导致页面首先更新,并且在事务提交后它的 RowVersion 也会首先更新。这不是我需要的。
问题,如果我将OnPageChanged()
改为处理OnPropertyChanging
事件 - 这会保证一致性吗?是否OnPropertyChanged
决定了更新在 EF 生成的 sql 中发生的顺序?对于这个案例还有什么其他建议吗?
sql - SQL Server 中行版本控制的时间戳与 Int 列
我想在我的 SQL Server 数据库中的一些表上应用数据并发。为了实现行版本控制,我正在考虑添加一个integer
名为 的列RowVersion
,并在更新行时增加该列的行值。
还有另一种选择:使用timestamp
列。当您使用timestamp
列时,SQL Server 会在行更新时自动创建一个唯一值。
我想知道这些选项的优点。我认为插入int
列来存储行版本是更通用的方式,而插入timestamp
列是 SQL Server 特定的。
更重要integer
的是,行版本的值比timestamp
列更易于阅读。
我想知道integer
为行版本字段选择列的其他优点或缺点。
谢谢。
timestamp - rowversion 在 SQL Server 2008 R2 中不是有效的数据类型吗?
在 Microsoft SQL Server 2008 R2 中不是rowversion
有效的数据类型?
奖金喋喋不休
我正在尝试向表中添加一rowversion
列:
但是当我尝试离开“数据类型”列时,SQL Server Management Studio 抱怨
无效的数据类型。
并坚持让我选择不同的数据类型:
rowversion
当rowversion
不是有效的数据类型时,如何创建列?
奖金观看
奖金阅读
行版本 (Transact-SQL)
timestamp是rowversion数据类型的同义词,受数据类型同义词的行为影响。在 DDL 语句中,尽可能使用rowversion而不是timestamp 。有关详细信息,请参阅数据类型同义词 (Transact-SQL)。
时间戳语法已弃用。此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。
额外的奖金喋喋不休
asp.net - ASP.NET OLTP App - 创建新版本的记录
我的问题与这个问题相同- 但需要补充一点。我的问题是我的网络应用程序的用户被允许创建记录的新版本。记录的每个新版本都会在 50 个其他相关表中创建相应的“新版本”,以记录对该特定版本的单独更改。这种包含大约 50 个表的新版本的创建在事务中运行(以在发生错误时回滚所有更改)。很多时候,这个过程很慢,这是可以理解的,因为“冗长的事务”涉及太多的表“插入”。
我正在寻找更好的解决方案/设计来实现这样的场景。
- 有没有更好的方法来维护同一记录的“版本”,特别是当它在多个表中创建太多重复项时
- 我觉得设计本身并不好,因为“每一行版本”都插入了太多记录,但至少想解决眼前的问题,即“冗长的事务”——这有时会导致延迟。可能没有出路,但仍然想问 - 如果我不将“版本控制”放在事务中,是否有更好的方法在发生错误时回滚(因为事务似乎阻止了其他 OLTP查询 - 由于在所有主表上插入新版本)
版本控制查询现在运行大约 10 秒,但有时会变得更糟。任何想法表示赞赏