.net LINQ到sql版本属性首选的sql server列定义是什么?

.net LINQ到sql版本属性首选的sql server列定义是什么?,.net,linq-to-sql,sql-server-2008,.net,Linq To Sql,Sql Server 2008,我们在LINQ to SQL类中的属性上使用ColumnAttribute上的IsVersion属性进行乐观并发检查。数据库中的列定义应该是什么 目前我们正在使用 version_number int NOT NULL IDENTITY (1, 1) 我们需要身份吗?我们可以让LINQ to SQL为我们更新版本号吗?标识的唯一问题是每行都有不同的编号。我们希望在更新行时看到数字增加1。您应该在数据库表中使用时间戳数据类型。这将转换为实体中的System.Data.Linq.Binary类型

我们在LINQ to SQL类中的属性上使用
ColumnAttribute
上的
IsVersion
属性进行乐观并发检查。数据库中的列定义应该是什么

目前我们正在使用

version_number int NOT NULL IDENTITY (1, 1) 

我们需要身份吗?我们可以让LINQ to SQL为我们更新版本号吗?标识的唯一问题是每行都有不同的编号。我们希望在更新行时看到数字增加1。

您应该在数据库表中使用时间戳数据类型。这将转换为实体中的System.Data.Linq.Binary类型

使用时间戳数据类型,SQL Server将自动为您创建并增加此值。

行的“版本”应在每次修改行时更新-行的唯一ID绝对不符合此条件!(这通常只设置一次,从不更改)

您要查找的是SQL Server中的
时间戳
行版本
——它过去被称为
时间戳
,但由于它实际上只是一个8字节的二进制“计数器”,与时间和/或日期无关(除了它随时间单调增加的事实之外),从现在起,SQL Server团队将称之为
ROWVERSION

这是一种由SQL Server内部更新的数据类型-您不能自己在此类字段中设置或插入值。它保证在行每次更改时都会更改,因此您可以使用它来检测数据中的某些更改


请参阅或阅读有关ASP Alliance的文章。

或者,如果数据变化不太频繁,您可以使用真实的时间戳(我在金融应用程序中经常这样做,但我可以保证使用不同的时间戳),或者使用简单的计数列。

@marc_s-我认为您的意思是单调递增。虽然单调并不不准确。@Mike Two:你完全正确:-)修正了我的帖子。谢谢。@TomTom-我更喜欢一个简单的计数列,但是当我将
IsVersion
属性设置为true时,我无法让LINQ to SQL为我更新它。这里也一样,没有-LINQ对此没有任何规定。不过,该类可以在变更逻辑中自行处理。不太好。。。但是。。。。总比没有好。