.net LINQ to Entities在SQL 2005 Express上生成包含datetime2的查询

.net LINQ to Entities在SQL 2005 Express上生成包含datetime2的查询,.net,sql-server-2005,linq-to-entities,compatibility,.net,Sql Server 2005,Linq To Entities,Compatibility,我有一个LINQ to Entities应用程序和一个数据库项目来管理VS 2010解决方案中针对.NET 4.0的模式。实体模型当前是从数据库反向工程的。其中一个表是用datetime类型的列定义的。数据库项目被配置为使用SQLServer2005兼容模式,因此它都部署为OK 我刚刚遇到一个问题,通过实体框架的update语句似乎使用了datetime2而不是datetime,这导致了一个异常,因为SQL 2005不支持该数据类型: System.Data.UpdateException: A

我有一个LINQ to Entities应用程序和一个数据库项目来管理VS 2010解决方案中针对.NET 4.0的模式。实体模型当前是从数据库反向工程的。其中一个表是用datetime类型的列定义的。数据库项目被配置为使用SQLServer2005兼容模式,因此它都部署为OK

我刚刚遇到一个问题,通过实体框架的update语句似乎使用了datetime2而不是datetime,这导致了一个异常,因为SQL 2005不支持该数据类型:

System.Data.UpdateException: An error occurred while updating the entries. 
See the inner exception for details. ---> System.ArgumentException: The version 
of SQL Server in use does not support datatype 'datetime2'.
从堆栈跟踪中可以看出,错误似乎发生在:

System.Data.Mapping.Update.DynamicUpdateCommand
我已经查看了所有的SQL代码和实体代码,并确认没有对datetime2的引用(包括dbschema文件)。我只能得出结论,数据类型是在实体框架生成的动态SQL查询中生成的


我如何确认或否认这一点,以及如何阻止它的发生?Entity framework不知道我已经要求db项目以2005兼容模式为目标,我也找不到一种方法来向它指出它正在查看的版本。值得一提的是,我在一台安装了2008 Express的机器上创建了这个项目,但我会定期切换到另一台没有安装2008 Express的机器(目前还不能升级)。

您需要将EDMX中的
ProviderManifestToken
更改为值2005。您可能根据2008数据库生成了数据库。进行此更改后,EF将停止使用2008语法。

对于LINQ to SQL有此问题的任何人,您可以在SQL Server中将表字段的数据类型更改为“smalldatetime”。然后将表重新拖到DBML中,重新编译、重新部署,就可以设置了。我找不到LINQ to SQL的ProvidermanifestToken的等价物