控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

ADO.NET Entity Framework 在低版本 SQL Server的问题

作者:佚名 出处:互联网 2010年04月16日 阅读:

ADO.NET Entity Framework 在低版本 SQL Server的问题

因为种种种种关系,开发用的数据库是Sql Server2008但是产品服务器是SQL Server2000,所以导致了问题的发生。

 

问题一:存取包含“DateTime”数据类型的列时会引发异常

异常信息:the version of SQL Server in use does not support datatype 'datetime2'

出现这个异常是因为SQL2008中加入了一个新的类型“DateTime2”,但是在SQL2005以及SQL2000中都不存在这个数据类型。这是一个已知的缺陷,可以手动解决。

用记事本或其它文本工具打开 *.edmx 文件,搜索 ProviderManifestToken="2008" ,然后将 2008 更改为 2005 保存,并重新编译即可。当在IDE中更改后,这里会被重新修改回2008,需要再次修改。

关于这个异常的更多信息,可以参考这个链接:http://msdn.microsoft.com/en-us/library/bb896273.aspx

 
问题二:执行 FirstOrDefault() 的时候会发生SQL错误

在EF中,SingleOrDefault() 是不被支持的,因此会建议使用 FirstOrDefault() 来代替它。但是因为面对的数据库版本比较高的关系,生成的SQL语句会发生兼容性问题,导致这样的异常出现:

第 1 行: '(' 附近有语法错误。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 第 1 行: '(' 附近有语法错误。

 
 因为EF生成的SQL语句中,FirstOrDefault() 会生成类似的语句:

SELECT TOP (1) ....
在 1 两边的括号会导致这个问题的发生。要解决这个问题,方法与问题一中的类似,不同的是把 2008 改成更低的 2000 即可。

 
总的感觉,EF不够成熟,当然这与我对它的掌握可能有一定关系,感觉不如LINQ灵活,虽然LINQ就一根筋

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统