EntityFramework中出现DateTime2异常的完美解决办法
今天在使用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; }
此方法可完美解决插入时间类型转换报错异常