C# 如果我移动migrations文件夹,为什么EF 6会忽略应用的迁移?
当我第一次在项目中运行C# 如果我移动migrations文件夹,为什么EF 6会忽略应用的迁移?,c#,entity-framework,entity-framework-6,entity-framework-migrations,C#,Entity Framework,Entity Framework 6,Entity Framework Migrations,当我第一次在项目中运行Enable Migrations时,它在项目根目录下创建了一个Migrations文件夹。然后,我将Migrations文件夹移动到我的Data文件夹下,其中包含上下文和模型等。然后,我纠正了两个已经应用的迁移中的名称空间 然后,我使用添加迁移IdToLong尝试了第三次迁移,但出现了一个错误: 由于以下原因,无法生成显式迁移 显式迁移挂起:[201703061039495\u初始, 201703061159110_联系请求]。应用挂起的显式迁移 在尝试生成新的显式迁移之
Enable Migrations
时,它在项目根目录下创建了一个Migrations
文件夹。然后,我将Migrations
文件夹移动到我的Data
文件夹下,其中包含上下文和模型等。然后,我纠正了两个已经应用的迁移中的名称空间
然后,我使用添加迁移IdToLong
尝试了第三次迁移,但出现了一个错误:
由于以下原因,无法生成显式迁移
显式迁移挂起:[201703061039495\u初始,
201703061159110_联系请求]。应用挂起的显式迁移
在尝试生成新的显式迁移之前
我能想到的唯一原因是EF已经存储了一个到连接字符串位置的相对路径,而该路径现在是无用的。我已经看到一些报告,EF在无法连接到数据库时显示相同的消息
EF的这种隐藏存储/配置与我们使用EF Core的发展方向背道而驰,我真的希望这个问题不会发生在那里
为了回答我的问题,当我移动
迁移时,哪些更改了或没有更改,以致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";
}
您是否尝试添加了行MigrationsDirectory=@“Data\Migrations”
到Configuration.cs
的构造函数,以便EF知道迁移的位置?您可以为Add Migration
命令提供附加参数,以将EF指向正确的配置位置:Add Migration-Configuration-YourProject.Data.migrations.Configuration-ProjectName YourProject.Data-StartUpProjectName YourProject.Data
。这里YourProject.Data.Migrations.Configuration
是Configuration.cs文件的位置。也许这可以解决您的问题。EF已经知道迁移的位置。它告诉我我不能添加新的,因为旧的还在等待,所以它会找到旧的。我想它会在项目中搜索配置.cs
,如果只找到一个,就使用它。我想你可能是一针见血。我稍后再查,可能会接受。