2010-07-28 51 views
5

我有一个LINQ to Entities应用程序和一个数据库项目来管理VS 2010解决方案中针对.NET 4.0的模式。实体模型目前是从数据库中反向设计的。其中一个表是用类型为datetime的列定义的。数据库项目配置为使用SQL Server 2005兼容性模式,因此它都部署OK。LINQ to Entities在SQL 2005 Express上生成包含datetime2的查询

我刚碰到其中通过实体框架的更新语句似乎使用DATETIME2而不是日期时间的问题,这会导致一个例外,因为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的机器上创建了这个项目,但是我定期切换到另一台没有(并且不能升级)的机器。

+2

对于任何有LINQ to SQL的问题的人,可以在SQL Server中将表格字段的数据类型更改为“smalldatetime”。然后将您的表重新拖到您的DBML,重新编译,重新部署,您应该设置。我找不到相当于LINQ to SQL的ProvidermanifestToken – 2011-12-27 20:14:46

回答

13

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

+0

完美!谢谢! – 2010-07-28 23:15:48

+0

非常有用,非常感谢。 – Fanda 2013-05-06 12:17:56