【问题标题】:LINQ to Entities produces query containing datetime2 on SQL 2005 ExpressLINQ to Entities 在 SQL 2005 Express 上生成包含 datetime2 的查询
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多