2016-08-23 88 views
0

我剛剛部署的服務器代碼曾用於一週前的工作。導致錯誤的代碼部分沒有改變,但是對象本身沒有改變。EF6 datetime2轉換爲datetime導致超出範圍值

這是一個Model First方法(從Database First轉換而來),並且我已經爲該模型添加了兩個關聯字段和兩個新表。

引發錯誤的部分代碼是關鍵任務。它基本上通過設置時間戳來禁用該值的併發編輯。但由於某種原因,它不起作用。

的特定代碼:

user.AlertConcurrency = DateTime.UtcNow; 
db.SaveChanges(); 

錯誤:

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. The statement has been terminated.

現在,user.AlertConcurrency字段是在數據庫中的日期時間類型。我不明白爲什麼它甚至會嘗試在此處執行datetime到datetime2的轉換。我錯過了什麼?

+0

這可能意味着* *另一個* DateTime屬性爲null,但在數據庫中不可爲空。 –

+0

這是失敗的數據已保存在數據庫中?聽起來就像你有數據存儲爲'datetime2',它沒有'datetime'的vaild值。 – Charles

+0

請問[這個問題]的答案(http://stackoverflow.com/q/1331779/215552)有幫助嗎? –

回答

0

datetime2的日期時間範圍較大,因此您可能有一個空的datetime2,即「0001/01/01」試圖轉換爲最小值爲「1753/01/01」的日期時間,因此轉換失敗。空的C#DateTime屬性因此會是您的datetime2值導致問題。

檢查您的模型是否完全更新/與您的數據庫同步並檢查DateTime屬性中的空值。如果您有空值數據庫值或想要保存空日期時間,則考慮在模型和數據庫中使用可空的日期時間。

+0

我沒有在數據庫中使用任何datetime2 - 我專門檢查了它,所有字段都是datetime。我確實有一些空的日期時間,但默認情況下它們是可空的。 – fonix232

+0

切記datetime是SMALLER日期範圍。您的c#DateTime空值是一個LARGE datetime2「0001/01/01」,因此當SQL嘗試將其保存到SMALLER日期時間時,它超出範圍。日期時間只能達到「1753/01/01」。 – Wurd

+0

是否有任何首選的方法來使Model First生成的數據庫使用datetime2而不是datetime? – fonix232

相關問題