EntityFramework中的datetime2异常的解决

(转)

最近使用.net的Entity Framework构建网站数据层,给一个实体的DATETIME类型的属性赋值时 突然莫名奇妙显示有
一个类型不匹配的异常如下:

System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值。

这让我非常费解,C#里貌似也没有datetime2类型啊,只有一个System.DateTime,我之前一直用也没有问题。
查阅网上的资料,看到有位大哥提出的原因是:

sqlServer2008中提供datetime2类型的数据(比datetime更精确),而用entity framework4会默认的把C#中的
System.DateTime类转化成sqlServer2008中的datetime2类型,而你的数据库中的元素的属性设的是datetime类型,
把datetime2转化成datetime系统会认为会丢失数据,所以会报错。(感觉这TM是设计缺陷吧!这是熟么默认设置啊!) 

而这位大哥提出的解决办法是把你的edmx中的ProviderManifestToken设置成2005,这样entityframework就会默
认转化成datetime了。

个人感觉这样做比较有风险,有关datetime2的具体问题我还没深究,留到之后有时间研究吧,一个简洁的比较莫名
奇妙的解决办法是:在C#中用new DateTime(year,month,day,hour,minute,second) 来赋值限制精度。

例:会报错的写法:
     Activity.StartTime=DateTime.Now;
     
     DateTime time=new DateTime();
     time=.......;//一些赋值操作
     Activity.StartTime=time;

不会报错的写法:
     Activity.StartTime=new DateTime(2011,4,22,22,42,00);

有关原因我也没有调查,诡异的事件背后一定有道理,有时间再好好看看,恩。

—————————————————————————————————————————————————————————————————————————————————————————————————————————

充分说明,设计数据库的时候,尽量少用时间字段!!!

时间: 2024-11-16 11:49:00

EntityFramework中的datetime2异常的解决的相关文章

EntityFramework中出现DateTime2异常的完美解决办法

今天在使用entityframework往数据库插入数据的时候,突然出现了一个数据类型转换异常的问题: System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值. 查了一下网上的资料,很多人给了原因与解决办法: C#中的DateTime类型比SqlServer中的datetime范围大.SqlServer的datetime有效范围是1753年1月1日到9999年12月31日,如果超出这个范围,

Java中的ExceptionInInitializerError异常及解决方法

当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异常.如果你了解Java中的静态变量,你会知道它们是在类加载的时候进行初始化的.如果在这个静态变量初始化的过程中出现了异常,那么就会抛出 java.lang.ExceptionInInitializerError异常.任何异常都可能会引发这种情况,比如说,java.lang.ArrayIndexOutOfBound或者java.lang.NullPointerExcepti

J2EE开发工作中遇到的异常问题及解决方法总结

转自:http://blog.csdn.net/rchm8519/article/details/41624381 1.    HttpClient I/O exception: 错误信息:I/O exceptioncaught when processing request: Connection timed out:connect 错误原因:IP不正确. 解决方法:改正IP 2.    Ambiguous handler methods mapped 错误信息:java.lang.Illeg

一个解决在其它的线程中访问UI 异常的小方法

写 WPF 的童鞋可能都会碰到 在子线程中访问 UI 异常的问题.这是为了防止数据不一致做的安全限制. 子线程中更新UI还要交给主线程更新,引用满天飞,实在是麻烦. 接下来,我们推出一个可以称之为框架的解决方案(拍砖的时候轻点). 一:解决判断当前线程是主线成的问题 在 C# 中 微软好像没有给出直接判断当前线程是否是主线程的方案,至少我是没找到. /// <summary> /// Lyx 线程框架 类 /// </summary> public class LyxThreadF

Tomcat异常及解决办法——持续更新中

公司项目,开发语言为java,中间件为Tomcat,运行过程中,从Tomcat出现了一些异常,现将异常及解决办法记录如下,仅供参考.(不断在补充中.......) 异常一: 1.日志内容 org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be l

Android Eclipse工程开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决办法

android.os.NetworkOnMainThreadException 异常的解决办法, 刚开是把HttpURLConnectionnection 打开连接这个方法放在UI线程里了,可能不是线程安全的,而且这个方法请求是需要等待的,所以就抛出了这个异常,后来用子线程打开的HttpURLConnection, 一切就都正常了,只要在主线程里开启子线程就行了.子线程利用URL 问题解决.下面贴一段代码 String file1 = SERVER_PATH; URL url = new URL

EntityFramework中的线程安全,又是Dictionary

继上次记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)后又再次与Dictionary博弈,这一次是在EntityFramework中的Dictionary. 从一个异常说起 这个异常与上次的异常有着同一个特性:间歇性,碰到类似的异常在信心上就被削弱了一大半... 在第一次看到这个异常的时候觉得解决它非常的简单,无非就是在字典操作的地方加个锁,但仔细看了一会发现这个问题并没有那么简单,可以看到这个异常的最后几个堆栈信息来自System.Data.Entity命名空间,也就是

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法

今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.发现报错的语句是: 1 foo.divide(bar)); 原来JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常.解决方法:

GDI+中发生一般性错误的解决办法(转载)

今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误"的异常.于是开始"摆渡",并寻找到了解决办法:赋予 NETWORK SERVICE 帐户以写权限. 以下为晚上寻找到的资料: 在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致"GDI+ 中发生一般性错误"的发生,通常有以下三种