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

时间:2010-07-28 05:05:48

标签: .net sql-server-2005 linq-to-entities compatibility

我有一个LINQ to Entities应用程序和一个数据库项目来管理针对.NET 4.0的VS 2010解决方案中的架构。目前,实体模型是从数据库中进行逆向工程的。其中一个表定义了一个datetime类型的列。数据库项目配置为使用SQL Server 2005兼容模式,因此它都可以正常部署。

我刚遇到一个问题,即通过实体框架的更新语句似乎使用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查询中生成的。

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

1 个答案:

答案 0 :(得分:13)

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