我们首先使用 Entity Framework 6 代码。我们最近决定将数据库中的 datetime 格式转换为 datetime2 格式。我们的数据库目前包含大量数据和大约 262 个表。
通过谷歌搜索,我找到了描述如何迁移到 datetime2 的答案:
modelBuilder.Properties<DateTime>()
.Configure(c => c.HasColumnType("datetime2"));
所以我把这部分代码放在了OnModelCreating
方法中。然后我运行了 Add-Migration 指令,它创建了一个包含大量DropPrimaryKey
,AlterColumn
和AddPrimaryKey
行的 Up 方法,如下例所示:
然后我运行 Update-Database 推荐并收到以下错误消息:
对象“DF__AdminMessa__Date__353DDB1D”取决于“日期”列。
ALTER TABLE ALTER COLUMN 日期失败,因为一个或多个对象访问此列。
我猜这个错误是由于表的约束引起的。我知道我可以暂时禁用它们并再次运行此脚本,但随后我们将不得不在 ~262 表上手动运行禁用约束的脚本。除此之外,我不知道在使用 Code First 时运行这样的纯脚本是否可以。
是否有任何适当的方法可以将现有数据库(带有数据)迁移到 EF Code First 中的 datetime2?