两个问题,然后是细节:
- 当我将 ProviderManifestToken 更改为“2005”时,还会出现哪些其他副作用?
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 在其中的位置更改,我不知道该代码库的其他内容会发生什么变化,并且我倾向于在技术不是绝对需要的情况下向后移动。