我在一個類中定義的可空DateTime
屬性:可爲空的DateTime屬性
public DateTime? ControlDate { get; set; }
當使用EF 6 CodeFirst生成數據庫(SQL服務器2008)從我的模型,我得到:
的問題是,當我救我的實例與ControlDate=null
我得到這個異常:
conversion of a datetime2 data type to a datetime data type
resulted in an out-of-range value
我已閱讀多個相關帖子和文章說,這通常發生在你 定義一個非空的日期時間屬性,並嘗試將其保存不前設置一個有效的日期, 有的人建議設置該屬性爲可爲空如果屬性值可以爲null(這是我的特例)。
我的問題是:爲什麼EF試圖設置一個默認日期,當我的屬性和列類型可爲空。 Null應該是一個有效的值,並且應該一直流向數據庫,而不需要進行任何其他轉換。
這裏相關文章:Conversion of a datetime2 data type to a datetime data type results out-of-range value
編輯:Here is a very similar question。非常詳細的解釋,以防有人感興趣。
經驗教訓:只是想澄清一下,仔細觀察後,我發現這是我的一個問題。右鍵保存我的對象之前,它被設置爲:
myObject.ControlDate = new DateTime()
其中,同時檢查,它顯示的默認不相容日期1/1/0001
。衆所周知這會導致這種例外。所以,我的結論:
- 模型聲明一個非空的
DateTime
屬性將導致SQL Server中的datetime
數據類型。 - 類聲明一個可空
DateTime
屬性的實例就可以到數據庫保存爲空 - 手動設置有效的默認日期(如果<> NULL)這是非常重要的,否則會其設置爲1/1/0001,並拋出異常
你是sur e它不是因爲另一個'DateTime'屬性? – tia 2014-09-02 12:37:26
將列類型更改爲datetime2(7) – 2014-09-02 12:42:39
請閱讀此文[DateTime2](http://stackoverflow.com/questions/3310569/what-is-the-significance-of-1-1-1753-in-sql -server) – 2014-09-02 12:46:35