C# 是sql';时间戳';列实际上是一个';字节[]';?

C# 是sql';时间戳';列实际上是一个';字节[]';?,c#,sql-server,entity-framework,asp.net-mvc-5,C#,Sql Server,Entity Framework,Asp.net Mvc 5,EntityFramework将SQL Server时间戳列映射到字节[]数组。因此,对于具有列(如LastUpdate timestamp的表,生成的模型属性是public byte[]LastUpdate) 我的问题是如何将此属性转换为DateTime? 如果解决方案是将时间戳更改为日期时间,那么您就帮不了我。SQL Server时间戳数据类型不是日期时间值,不应该与日期时间值混淆。请记住,TIMESTAMP是ROWVERSION的同义词,应该这样对待。因此,将其作为字节数组是存储它的最佳方

EntityFramework
将SQL Server
时间戳
列映射到
字节[]
数组。因此,对于具有列(如
LastUpdate timestamp
的表,生成的模型属性是
public byte[]LastUpdate

我的问题是如何将此属性转换为
DateTime

如果解决方案是将时间戳更改为日期时间,那么您就帮不了我。

SQL Server
时间戳
数据类型不是日期时间值,不应该与日期时间值混淆。请记住,
TIMESTAMP
ROWVERSION
的同义词,应该这样对待。因此,将其作为字节数组是存储它的最佳方式

从:

rowversion数据类型只是一个递增的数字,而不是 保留日期或时间。要记录日期或时间,请使用datetime2 数据类型


是的,它是一个字节数组,不是日期时间,如果您不喜欢将其作为数组“播放”,可以将其转换为
ulong

    var timestamp = BitConverter.ToUInt64(array, 0);

当你说时间戳时,你是指SQL Server时间戳数据类型吗?是的,当然谢谢我编辑了问题我删除了时间戳标记,因为它不相关(并添加了SQL Server!)你不能-
时间戳
不是日期和/或时间类型。它更像是行版本的唯一标识符——例如,它通常用于可靠的并发更新。@Bellash您怎么会这么认为?阅读我链接的文档,这里已经解释过了。@Bellash,但是您认为的内容完全不相关,因为sql server中的时间戳字段类型不包含时间戳。从来没有。它是Sybase SQL Server的遗留版本。这是一个计数器,不是TimesMap。这在文档中非常清楚。还值得注意的是,
时间戳
名称被弃用,取而代之的是称之为
ROWVERSION
@TomTomTom。我想你可能会争辩说,该值是在创建/编辑时压印的(我知道很脆弱!)@DavidG,但这仍然不是时间戳,因为它甚至没有在其中标记时间。更新计数器,随便什么。当时任何一台做时间戳的机器(在我年轻的时候我看到了很多)实际上都会在上面印上日期和时间。所以,这个论点是站不住脚的;)这是正确的答案。以上答案也是正确的,但OP询问解决方案,我认为这是OP问题的答案。