【发布时间】:2021-08-03 04:27:14
【问题描述】:
我们的 .net 4.6 项目中有实体框架。我们已经成功运行迁移已经有一段时间了。突然,当我们运行迁移时,它给出了一条错误消息“无法创建数据库......因为它已经存在”。不确定它是否试图从头开始。我知道 _migrationshistory 表已填充。它是如何发生的,可能是因为我们创建了另一个 .net 核心服务,并在同一个数据库上启用了 EF 核心迁移,但它是一个新的上下文,其中包含一组全新的表,这些表与我们的 .net 框架项目中的表不重叠 迁移中断的地方。因此,当我们在同一个数据库上运行迁移时,它可能会重置一些东西,任何人都可以指导我们如何让两个迁移同步运行而不会相互影响。正如我所说,这些表不会相互重叠。在数据库中为每个项目创建了两个不同的 migrationshistory 表
【问题讨论】:
-
您不能让多个上下文指向同一个数据库。只能有一个 _EFMigrationsHIstory 表。您为什么不查看表格,看看上次应用的迁移是什么。
-
@Canolyb1 我在两个历史表(__EFMigrationsHistory 和 __MigrationHistory)中都看到了所有迁移。但正如我所说,当我运行迁移时,它会尝试再次创建数据库
-
EFMigrationsHistory 适用于 .net core,而 MigrationsHistory 适用于 Entity Framework pre .net core。如果您的项目适用于 4.6,那么您很可能应该查看 MigrationsHistory 表并确保所有迁移 ID 与应用程序中的迁移文件夹匹配。如果链中缺少一个 ID,EF 将抛出该错误。
-
@Canolyb1。正确的。我们有一个 .net 框架服务(__MigrationHistory)和一个 .net 核心服务(__EFMigrationsHistory)。我们的两个迁移表都与代码中的迁移文件同步。但是,当我在我们的 .net 框架服务上运行 update-Database 时,它会尝试重新创建数据库并抛出错误,因为数据库已经存在)。为什么它会再次创建数据库。我不知道。我的猜测是,当我们为 dotnet 核心服务运行更新数据库时,它搞砸了一些东西,导致迁移在另一个中失败。因为我们之前没有遇到过这个问题
-
尝试运行脚本以查看返回的脚本。更新数据库 -Verbose -f -Script
标签: entity-framework entity-framework-core