2010-12-09 60 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)都拋出更多的描述性錯誤,這將很快得到解決。這就是生活。