如果我使用这个流畅的nhibernate映射在SQL中存储System.DateTime
作为时间戳:
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使用更准确的字段类型吗?
答案 0 :(得分:8)
这是SQL-Server标准datetime类型的限制。
舍入为.000,.003或.007秒的增量
仅在SQL Server 2012 2008及更高版本中有更准确的日期时间类型。我不知道你是否可以让NHibernate使用它们(它肯定会破坏可移植性)。
或者,如果此精度非常重要,您可以将日期时间值保存为数字甚至字符串,在NHibernate类型转换器中进行转换。我曾经做过类似的事情(有人使用的是MySQL的日期),但是很久以前我不知道这种方法是否仍然有效。阅读NHibernate关于自定义数据类型的文档。
答案 1 :(得分:3)
Datetime
数据类型存储精度为3ms的数据:存储的值可能为+/- 3 ms。
使用datetime2
数据类型。它的精度为100纳秒。
在SQL 2008及更高版本中,time
和datetimeoffset
数据类型的精度也为100纳秒。