【问题标题】:EF: Change ProviderManifestToken or change datatype?EF:更改 ProviderManifestToken 或更改数据类型?
【发布时间】:2011-10-04 14:50:51
【问题描述】:

两个问题,后面是细节:

  1. 当我将 ProviderManifestToken 更改为“2005”时,还会出现哪些其他副作用?
  2. 将数据库中的架构从datetime 更改为datetime2 是否不明智?例如,如果我将 ProviderManifestToken 保留为“2008”,然后有人尝试从 EDMX 模型生成数据库架构,它会在创建这些列时使用 datetime2 数据类型吗?

详情:

VS2010 SP1
.NET 4
EF 4
SQL Server 2008

我没有动手实体框架的经验,我突然维护了一个使用它的代码库。代码库很脆弱,时间紧迫,留下来的人还不太了解。

解决方案资源管理器显示一个 EDMX 文件,该文件映射到我们 DEV 数据库中的现有架构。我不知道哪个(模型或数据库)先出现。

提交操作失败并出现此错误:

将 datetime2 数据类型转换为 datetime 数据类型 导致超出范围的值。

当我查看 SQL Server 2008 实例中日期/时间列的数据类型时,它们都是 datetime,而不是 datetime2

当我查看 EDMX 文件的 XML 时,我看到了这个 Schema 元素属性:

ProviderManifestToken="2008"

我猜想,在我的 .NET 代码中的某个地方有一个 DateTime 值,它的值超出了 SQL Server 2008 的 datetime 数据类型的范围。我从阅读中了解到,将 EDMX 的 ProviderManifestToken 更改为“2005”会阻止 EF 在这些提交期间尝试使用 datetime2 类型。

这是我的问题:我不知道如果我从 2008 年到 2005 年更改此代码库或 EF 在其中的位置会发生什么变化,而且我倾向于在技术不是绝对需要的情况下倒退.

【问题讨论】:

    标签: .net sql-server-2008 datetime entity-framework-4 datetime2


    【解决方案1】:

    通过将 ProviderManifestToken 更改为 2005,有些事情确实不再起作用。具体来说,使用与 SQL 2008 时间类型相关的函数的 LINQ 查询。我个人通过将令牌更改为 2005 并没有遇到问题(即使在跨多个环境的每个环境的基础上)......但这不是掉以轻心的事情。您需要彻底测试应用程序中的所有查询。

    至于由 edmx 反向生成的架构 - 这是由与您的 edmx 关联的 SQL 生成模板确定的,而不是 ProviderManifestToken 本身。

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      相关资源
      最近更新 更多