2

如果我System.DateTime使用这种流畅的 nhibernate 映射将 a 作为时间戳存储在 SQL 中:

Map(x => x.LoggedTimeStamp).CustomType("Timestamp")
                           .Not.Nullable();

当我存储和调用时间戳时:

new DateTime(2013, 5, 10, 14, 59, 13, 235);

它回来等于new DateTime(2013, 5, 10, 14, 59, 13, 237);

它增加了 2 毫秒。这在 SQL Server 管理工作室中也很明显。

我的问题是,我可以告诉 NHibernate 使用更准确的字段类型吗?

4

2 回答 2

9

这是 SQL-Server 标准日期时间类型的限制。

以 0.000、0.003 或 0.007 秒为增量四舍五入

只有在 SQL Server 2012 2008 及更高版本中才有更准确的日期时间类型。我不知道你是否可以让 NHibernate 使用这些(它肯定会破坏可移植性)。

或者,如果这种精度非常重要,您可以将日期时间值保存为数字甚至字符串,在 NHibernate 类型转换器中进行转换。我曾经做过类似的事情(有人使用 MySQL 的 0000-00-00 日期),但那是很久以前的事了,我不知道这种方法是否仍然有效。阅读 NHibernate 关于自定义数据类型的文档。

于 2013-06-12T10:27:11.590 回答
4

DatetimeSQL Serve 中的数据类型以 3 毫秒的精度存储数据:存储的值可能是 +/- 3 毫秒。

使用datetime2数据类型。它的精度为 100 纳秒。

此外timedatetimeoffset在 SQL 2008 及更高版本中,数据类型的精度为 100 纳秒。

于 2013-06-12T10:31:07.900 回答