在ASP.NET MVC 使用 EF Code First 添加數據時遇到 從 datetime2 數據類型到 datetime 數據類型的轉換產生一個超出範圍的值 的問題,檢查了下數據表並無設置爲datetime2 數據類型的字段html
最後設斷點調試才發現問題所在,有一個datetime類型的字段設爲了避免可爲空,code first的實體類中是以DateTime爲數據類型,默認值爲0001-01-01 00:00:00.000,因此纔會提示超出了範圍函數
官方MSDN對於datetime2的說明:post
定義結合了 24 小時制時間的日期。 可將 datetime2 視做現有 datetime 類型的擴展,其數據範圍更大,默認的小數精度更高,並具備可選的用戶定義的精度。spa
這裏值的注意的是datetime2的日期範圍是"0001-01-01 到 9999-12-31"(公元元年 1 月 1 日到公元 9999 年 12 月 31 日)。調試
而datetime的日期範圍是:」1753 年 1 月 1 日到 9999 年 12 月 31 日「。這裏的日期範圍就是形成「從 datetime2 數據類型到 datetime 數據類型的轉換產生一個超出範圍的值」這個錯誤的緣由。code
DateTime字段類型對應的時間格式是yyyy-MM-dd HH:mm:ss.fff,3個f,精確到1毫秒(ms),示例2014-12-0317:06:15.433。 DateTime2字段類型對應的時間格式是yyyy-MM-dd HH:mm:ss.fffffff,7個f,精確到0.1微秒(μs),示例2014-12-0317:23:19.2880929。 若是用SQL的日期函數進行賦值,DateTime字段類型要用GETDATE(),DateTime2字段類型要用SYSDATETIME()。
最簡單的解決辦法就是,給字段設置一個大於1753 年 1 月 1 日的初始值htm
原文地址:http://bkcoding.cn/post_1212.htmlblog