NHibernate 2.1.2抛出DateTime null溢出异常

chu*_*nce 5 nhibernate fluent-nhibernate

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

NHibernate 2.*映射文件:如何定义可空的DateTime类型(DateTime?)?

NHibernate不会持久化DateTime SqlDateTime溢出

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

public virtual DateTime? CreatedOn { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

如果我运行SQL事件探查器,我可以看到NHibernate尝试执行的最后一个命令(这是一个非常长的语句,所以我截断了它):

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

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

这是怎么回事?

chu*_*nce 0

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