2010-12-09 59 views
5

我有一个类似的问题,这些问题: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持续,罚款,不抱怨了!

发生了什么事?

回答

0

我不知道为什么,但是这个作品here。不像链接中的例子,我的是DateTime?所以......我不知道它为什么会起作用,但它确实如此。

+0

A DateTime?因为它允许DateTime为空。如果日期时间不是空(仅为DateTime),它将被实例化为最小值,即1/1/0001。 – 2013-01-23 00:11:53

1

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

0

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

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