实体框架错误 - 正在使用的SQL Server版本不支持数据类型'datetime2'

时间:2011-07-01 10:57:39

标签: c# asp.net entity-framework

我在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. 有更好的解决方法吗?

3 个答案:

答案 0 :(得分:23)

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

听起来不太好。但就我现在所拥有的一切。

答案 1 :(得分:2)

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

  

事实证明,实体框架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">

答案 2 :(得分:0)

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

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