我有一个类似的问题,这些问题:NHibernate的2.1.2扔日期时间空溢出异常
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?
问题应该修复,我不应该对我的映射做任何特别的事情。因此,我所有的日期时间属性只需设置像这样:
public virtual DateTime? CreatedOn { get; set; }
在我的数据库(SQL2008),所有的DateTime属性被设置为允许空。我有我的NHibernate的配置文件设置为使用SQL2008的方言:
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
NHibernate的正常工作对任何不包括日期时间。作为参考,下面是我收到确切的错误:
> 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持续,罚款,不抱怨了!
发生了什么事?
A DateTime?因为它允许DateTime为空。如果日期时间不是空(仅为DateTime),它将被实例化为最小值,即1/1/0001。 – 2013-01-23 00:11:53