我对这些问题有类似的问题:
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会保持正常,不会抱怨!
发生了什么事?
答案 0 :(得分:1)
您的DateTime属性可能设置为DateTime.MinValue(1/1/0001)而不是null或DateTime列的有效范围中的值。
答案 1 :(得分:0)
我不知道为什么,但这有效here。与链接中的示例不同,我的是DateTime?
所以....我不知道它为什么会起作用,但确实如此。
答案 2 :(得分:0)
我有同样的问题。起初我以为我通过将我的sql类型从可空日期切换到可以为空的日期时间来修复它。然而,这是海市蜃楼。根本原因是另一个新添加的表的级联更新。
如果每个人(尤其是MS)都投入了更多的描述性错误,这个问题就会很快得到解决。这就是生活。