2012-02-23 63 views
3

我在DB中擁有Subscribers表,它使用了默認值GetDate()的DateCreate字段。 當我嘗試通過實體框架,以新的記錄添加到表:SqlDateTime溢出。必須介於1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM

 Subscribers subs = new Subscribers(); 
     subs.Email = email; 
     subs.DateCreate = DateTime.Now; 
     DataBase.DBContext.AddToSubscribers(subs); 
     DataBase.DBContext.SaveChanges(); 

它拋出一個異常: SQLDATETIME溢出。必須介於1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之間。

誰能幫幫我? 謝謝。

+0

是您交易中唯一的'Date'屬性嗎?代碼似乎很好 – sebagomez 2012-02-23 15:04:11

+0

Subscribers類中定義的其他字段是什麼?如果有的話是DateTime,它們是否可以空? – 2012-02-23 15:04:14

+0

是的,還有另一個可以爲空的DateTime字段 – ihorko 2012-02-23 15:07:33

回答

4
  1. 確保設備的時鐘是不是在15世紀;-)
  2. 重新創建你的模型。
  3. 它的表格有默認值,您不必在代碼中設置它。
  4. 考慮使用GETUTCDATE()代替GETDATE()
  5. 確保有沒有默認值,沒有其他的日期時間字段。
+0

是的,那裏還有另一個可以爲空的DateTime字段,什麼? – ihorko 2012-02-23 15:08:21

+0

確保你的屬性的類型是'DateTime?'而不是'DateTime'。在後一種情況下,'DateTime.MinValue'將被插入表中,導致異常。 'MinValue'在1753年前是...... – 2012-02-23 15:10:00

+1

嗯,如果模型是自動生成的,我該怎麼做? – ihorko 2012-02-23 15:13:04

0

如果您使用.NET代碼中使用Convert.ToDateTime()那麼請檢查應用程序託管服務器的日曆設置,主要時區和短日期格式

2

這是一個遲到的答案,但我有同樣的問題只是現在。造成這個問題的原因是你的實體中有另一個日期,並且默認值(MinValue)是1/1/0001。在SQL/Server中,默認值(MinValue)爲1/1/1753或其他值。

我發現一篇很好的文章,幫助我在vfstech.com,它建議在數據庫中使用datetime2而不是datetime,但這不是我的選擇。但是它也有代碼可以翻譯這兩種方式。我很快創建了一個從我的實體類繼承的類,並在我的應用程序中使用它,它解決了我的問題,沒有必要用我認爲的Microsoft業務邏輯來感染我的業務邏輯,Microsoft應該已經正確實施。

相關問題