今天在使用entityframework往數據庫插入數據的時候,突然出現了一個數據類型轉換異常的問題:
System.Data.SqlClient.SqlException: 從 datetime2 數據類型到 datetime 數據類型的轉換產生一個超出范圍的值.
查了一下網上的資料,很多人給了原因與解決辦法:
C#中的DateTime類型比SqlServer中的datetime范圍大。SqlServer的datetime有效范圍是1753年1月1日到9999年12月31日,如果超出這個范圍,EF就會把datetime轉換為datetime2,但在數據庫的映射類型還是datetime類型,所以才會出現異常,
網上解決辦法:
1.將數據庫中的時間字段改成datetime2
2.修改ef的數據庫生成配置
3.傳時間在數據庫規定的范圍內的時間參數
但是個人覺得這幾種辦法都不是十分妥當,個人解決辦法:將model的時間類型設置為可空類型即可,例如
public DateTime? CreatTime{get;set;}//或者 public Nullable<DateTime> CreateTime { get; set; }
此方法可完美解決插入時間類型轉換報錯異常