首页 > 解决方案 > 为什么 EF 核心中的 [Timestamp] 列由 byte[] 列而不是 UInt64 支持

问题描述

在实体框架中使用时间戳列时,它由rowversionSQL Server 中的列类型支持并表示为 CLR byte[](根据文档)。该列的长度为 8 个字节。

为什么他们决定使用byte[]而不是UInt64?它会很好地保持价值。使用 byte[] 是否有任何不明显的好处,还是仅用于将 EF 与其他数据库引擎一起使用,它可以在内部将类似行版本的列实现为不同的数据类型。

标签: c#sql-serverentity-frameworkef-core-2.0

解决方案


rowversion/timestamp 字段的用途是每次更新时,它都是一个新的唯一值。对于某些实现,它是一个“时间戳”这一事实是无关紧要的。

根据this page,对于MS-SQL,它是一个递增的数字,根据this page,对于MySql,它是一个时间戳。

因此,“字节”数组在兼容性方面是最有意义的。


推荐阅读