Entity Framework错误 - 正在使用的SQL Server版本不支持数据类型“datetime2”。

4

我在ASP.NET 4.0 Web Form中使用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. 有更好的解决方法吗?

虽然这个问题与您的问题重复,但是这个其他问题引起了更多的关注和回答,可能值得查看。 - Frédéric
3个回答

23

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

听起来不是很好,但这是我现在所拥有的。


刚刚又遇到了这个问题。在模型更新时,设置被覆盖了。也许我们可以通过后构建操作来“解决”这个问题。 - F.H.

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(如果这是您用来开发的版本)。然后,在将代码推送到测试或生产环境之前,您需要再次更改它。 - Perry

0

如果你没有其他日期,只需将DateTime.Now作为日期即可...

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


我已经在做那件事了。另外,那个错误会无法将datetime2转换为datetime,对吧? - naveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接