为什么 EF 核心中的 [Timestamp] 列由 byte[] 列而不是 UInt64 支持

Mar*_*mro 4 c# sql-server entity-framework ef-core-2.0

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

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

Nei*_*eil 5

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

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

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