Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我移动migrations文件夹,为什么EF 6会忽略应用的迁移?_C#_Entity Framework_Entity Framework 6_Entity Framework Migrations - Fatal编程技术网

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
,如果只找到一个,就使用它。我想你可能是一针见血。我稍后再查,可能会接受。