【问题标题】:Entity Framework Error - The version of SQL Server in use does not support datatype 'datetime2'实体框架错误 - 使用的 SQL Server 版本不支持数据类型“datetime2”
【发布时间】:2011-07-01 10:57:38
【问题描述】:

我在 ASP.NET 4.0 Web 窗体中使用 Entity Framework 4.0。

在开发服务器上一切正常。但是当我到达生产服务器时,我的 Elmah 记录了这个错误

System.ArgumentException
使用的 SQL Server 版本不支持 数据类型“datetime2”。

我做了一个快速的研究,发现datetime2 又名datetime2(7) 是问题所在,设置ProviderManifestToken="2005" 将解决问题。

我的问题是这个。我的开发服务器有 SQL Server 2008 R2,生产服务器有 SQL Server 2008 Express。因此,将清单更改为 2005 似乎并不正确。

我的问题是

  1. 设置ProviderManifestToken="2005" 会起作用吗?
  2. 为什么我在任何表中都没有使用过 Entity Framework 会生成 datetime2
  3. 有更好的解决方法吗?

【问题讨论】:

  • 虽然与您的问题重复,但此other question 吸引了更多关注和答案,可能值得一试。

标签: c# asp.net entity-framework


【解决方案1】:

到目前为止,我没有看到任何解决方法。因此,如果您使用的是 SQL Server 2008 Express,请右键单击您的 edmx,使用 XML(文本)编辑器打开它并设置 ProviderManifestToken="2005"

听起来不太好。但到目前为止我所拥有的一切。

【讨论】:

  • 第二次遇到这个问题。设置在模型更新时被覆盖。也许我们可以通过后期构建操作“解决”这个问题。
【解决方案2】:

我发现这篇博文中的答案对我有用:The version of SQL Server in use does not support datatype 'datetime2'

事实证明,Entity Framework 4 不知何故产生了使用 SQL Server 2008 的想法。修复方法是在 XML 编辑器中编辑 .edmx 文件并设置 ProviderManifestToken="2005" 而不是 2008。(您需要重新构建.) 以下是该行在 SQL Server 2005 中的外观:

<Schema Namespace="OfficeBookDBModel.Store"
    Alias="Self" Provider="System.Data.SqlClient"
    ProviderManifestToken="2005"
    xmlns:store=http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator
    xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">

【讨论】:

  • 这也适用于我,但如果你必须更新你的模型,它会将它重置为 2008,如果这是你用来做开发的。然后,您需要再次更改它,然后再将代码推送到您的测试或产品盒中。
【解决方案3】:

如果您没有其他日期,请将DateTime.Now 作为日期...

有同样的错误,这解决了它,因为如果你不为你的日期时间对象设置一个值,它将是 1/1/0001 12:00:00 AM...这会给你错误然后...再次这就是我解决问题的方法

【讨论】:

  • 我已经在这样做了。加上该错误将无法将 datetime2 转换为 datetime 对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多