当我第一次在项目中运行 Enable-Migrations
时,它会在项目根目录下创建一个 Migrations
文件夹。然后,我将 Migrations
文件夹移动到我的 Data
文件夹下,其中包含上下文和模型等。然后我更正了两个已应用的迁移中的命名空间。
然后我尝试使用 Add-Migration IdToLong
进行第三次迁移,但我收到一条错误消息:
Unable to generate an explicit migration because the following explicit migrations are pending: [201703061039495_Initial, 201703061159110_ContactRequest]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
我能想到的唯一原因是 EF 已经存储了连接字符串所在位置的相对路径,而该路径现在已无用。我看到一些报告说 EF 在无法连接到数据库时显示相同的消息。
EF 的这种隐藏存储/配置违背了我们使用 EF Core 的方向,我真的希望这个问题不会发生在那里。
接下来要回答我的问题,当我移动 Migrations
以便 EF 不再看到我已经应用了这些迁移时,发生了什么变化或没有发生什么变化?
最佳答案
移动迁移时,您可能(可能)更改了对象的命名空间。此命名空间用作 __MigrationHistory 表中 ContextKey 列的默认值。所以现在当 EF 检查已应用了哪些迁移时,它不会匹配旧的。
如果这是您的问题,您可以通过多种方式解决:
1) 运行脚本重命名上下文键以匹配您的新命名空间:
UPDATE [dbo].[__MigrationHistory]
SET [ContextKey] = 'New_Namespace.Migrations.Configuration'
WHERE [ContextKey] = 'Old_Namespace.Migrations.Configuration'
2) 将旧的上下文键硬编码到迁移配置构造函数中:
public Configuration()
{
AutomaticMigrationsEnabled = false;
ContextKey = "Old_Namespace.Migrations.Configuration";
}
关于c# - 如果我移动 Migrations 文件夹,为什么 EF 6 会忽略应用的迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42646435/