NHibernate 2.1.2抛出DateTime null溢出异常

时间:2010-12-09 17:00:35

标签: nhibernate fluent-nhibernate

我对这些问题有类似的问题:

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属性都设置为允许为null。我的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事件探查器,我可以看到NHibernate尝试执行的最后一个命令(这是一个非常长的语句,所以我截断了它):

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

如果我将此语句作为查询执行,SQL会保持正常,不会抱怨!

发生了什么事?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

如果每个人(尤其是MS)都投入了更多的描述性错误,这个问题就会很快得到解决。这就是生活。