【问题标题】:NHibernate 2.1.2 throwing DateTime null overflow exceptionNHibernate 2.1.2 抛出 DateTime 空溢出异常
【发布时间】:2010-12-09 17:00:34
【问题描述】:

我遇到了与这些问题类似的问题:

NHibernate 2.* mapping files: how to define nullable DateTime type (DateTime?)?

NHibernate won't persist DateTime SqlDateTime overflow

我正在使用 NHibernate 2.1.2 和 FluentNhibernate 1.0.0.636。在 NHibernate 2.x 中,可以为空的DateTime? 问题应该得到修复,我不必对我的映射做任何特别的事情。因此,我所有的 DateTime 属性都简单地设置如下:

public virtual DateTime? CreatedOn { get; set; }

在我的数据库 (SQL2008) 中,所有 DateTime 属性都设置为允许为空。我有我的 NHibernate 配置文件设置来使用 SQL2008 方言:

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>

NHibernate 适用于不包含 DateTime 的任何内容。作为参考,这是我收到的确切错误:

> at
> NHibernate.AdoNet.SqlClientSqlCommandSet.ExecuteNonQuery()</StackTrace><ExceptionString>System.Data.SqlTypes.SqlTypeException:
> SqlDateTime overflow. Must be between
> 1/1/1753 12:00:00 AM and 12/31/9999
> 11:59:59 PM.

如果我运行 SQL Profiler,我可以看到 NHibernate 尝试执行的最后一个命令(这是一个很长的语句,所以我已经截断了它):

exec sp_executesql N'UPDATE Projects SET Job = @p0, CreatedOn = @p1, .. WHERE (Where Clause), @p0=219221, @p1=NULL

如果我将此语句作为查询执行,SQL 会很好地保持它,根本不会抱怨!

发生了什么事?

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    您的 DateTime 属性可能设置为 DateTime.MinValue (1/1/0001),而不是 null 或 DateTime 列的有效范围内的值。

    【讨论】:

      【解决方案2】:

      我不知道为什么,但这有效here。与链接中的示例不同,我的是 DateTime? 所以....我不知道它为什么有效,但确实有效。

      【讨论】:

      • 日期时间?之所以有效,是因为它允许 DateTime 为空。如果日期时间不可为空(只是 DateTime),它会被实例化为最小值,即 1/1/0001。
      【解决方案3】:

      我也有同样的问题。起初我以为我通过将我的 sql 类型从可空日期切换到可空日期时间来修复它。然而,那是海市蜃楼。根本原因是对另一个新添加的表的级联更新。

      如果每个人(尤其是 MS)都抛出更多描述性错误,这将很快得到解决。这就是生活。

      【讨论】:

        猜你喜欢
        • 2012-05-03
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        相关资源
        最近更新 更多