我有一个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的机器上创建了这个项目,但是我定期切换到另一台没有(并且不能升级)的机器。
对于任何有LINQ to SQL的问题的人,可以在SQL Server中将表格字段的数据类型更改为“smalldatetime”。然后将您的表重新拖到您的DBML,重新编译,重新部署,您应该设置。我找不到相当于LINQ to SQL的ProvidermanifestToken – 2011-12-27 20:14:46