【发布时间】:2010-07-28 05:05:48
【问题描述】:
我有一个 LINQ to Entities 应用程序和一个数据库项目来管理针对 .NET 4.0 的 VS 2010 解决方案中的架构。实体模型目前是从数据库逆向工程的。其中一个表是用日期时间类型的列定义的。数据库项目配置为使用 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 的机器上创建了这个项目,但我会定期切换到另一台没有(而且还不能升级)的机器。
【问题讨论】:
-
对于任何遇到 LINQ to SQL 问题的人,您可以在 SQL Server 中将表字段的数据类型更改为“smalldatetime”。然后将你的表重新拖到你的 DBML 中,重新编译,重新部署,你应该已经设置好了。我找不到 LINQ to SQL 的 ProvidermanifestToken 的等价物
标签: .net sql-server-2005 linq-to-entities compatibility