1

两个问题,然后是细节:

  1. 当我将 ProviderManifestToken 更改为“2005”时,还会出现哪些其他副作用?
  2. datetime将数据库中的架构从to更改是不明智的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”会阻止 EFdatetime2在这些提交期间尝试使用该类型。

这是我的问题:我不知道如果我从 2008 年到 2005 年将此代码库或 EF 在其中的位置更改,我不知道该代码库的其他内容会发生什么变化,并且我倾向于在技术不是绝对需要的情况下向后移动。

4

1 回答 1

1

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

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

于 2011-10-04T15:07:49.400 回答