EF Core的[TimeStamp]属性取值是否始终保持递增?
我了解到
TimeStamp属性一般用于实现乐观并发控制,想确认是否可以默认该属性的取值始终是递增的。我计划将该值用于校验镜像到另一台服务器的同一数据库出现数据不一致时,哪一版本的数据为最新版本。我知晓该方案并非绝对可靠,但只要TimeStamp值保持递增,就足以满足我的使用需求。
解答
同一数据库实例下生成的TimeStamp值一定是全局单调递增的,你的方案可行。
核心特性说明
TimeStamp是SQL Server的历史命名,现在官方标准名称为rowversion,二者功能完全等价。它本质是数据库全局维护的8字节二进制计数器,只要库内任意包含该类型列的行发生插入或更新操作,对应行的TimeStamp列就会被自动赋值为当前最新的计数器值,同时计数器自动+1。- 该计数器的递增是全局、连续、不可逆的,同一数据库内不会出现新操作生成的
TimeStamp值小于旧操作生成值的情况,也不会出现重复值。
镜像比对场景注意事项
- 只有同源的
TimeStamp值才有可比性:只要两边的镜像都来自同一个原始数据库,TimeStamp值的大小就和数据更新的先后顺序完全对应,值更大的版本一定是更新的版本。 - 仅存在两类会导致
TimeStamp逻辑失效的边界场景,避开即可正常使用:- 数据库执行了还原、重建操作,会重置全局
TimeStamp计数器 - 镜像链路中断后重建,没有先做一次全量数据对齐就直接开始增量比对
- 数据库执行了还原、重建操作,会重置全局
内容的提问来源于stack exchange,提问作者s k
相关产品推荐
相关产品推荐

