3

我有一个带有datetime-type 列的表作为版本。这是一个遗留数据库,所以我不可能将它更改为datetime2或使用不同的版本控制机制。NHibernate 类将其映射到DateTimec# 类型的属性。

我已经看到了几个问题以及有关此问题的论坛帖子和回复,但是无论我尝试过什么,NHibernate 都会将 DateTime 值的毫秒数截断。

这是我目前使用 Fluent NHibernate 所做的事情:

Version(x => x.ModifiedOn).Column("ModifiedOn")
                          .CustomType("Timestamp").Not.Nullable();

在我正在映射的课程中,我有:

public virtual System.DateTime ModifiedOn { get; set; }

数据库是 MS SQL 2008,Fluent NH 配置如下:

Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008.ConnectionString......)

我需要什么:如何配置 Fluent NH 以使 NH 以毫秒为单位发送日期时间值的工作示例(从我在代码中看到的应该是 10 毫秒的精度)。谢谢!

4

1 回答 1

0

您描述的行为(截断毫秒)是 NHibernate 的默认值行为DateTime,因此听起来 Fluent NHibernate 忽略了.CustomType("Timestamp"). 您能否导出映射文件并在此处发布 *.hbm.xml 文件之一?这将帮助我们确定问题出在 NHibernate、Fluent NHibernate 还是其他地方。有关导出映射文件的说明,请参阅 Fluent NHibernate 文档。

如果 Fluent NHibernate 工作正常,那么您应该会看到类似于

<version name="ModifiedOn" type="Timestamp">
  <column name="ModifiedOn" not-null="true" />
</version>

我想你会看到type="System.DateTime"。最可能的原因是您的 Fluent NHibernate 代码根本没有被执行。发布有关您如何使用 Fluent NHibernate 创建会话工厂的详细信息将有助于我们确定这是否是原因。

于 2011-08-04T18:04:28.060 回答