Entity framework core 实体框架核心:脚本迁移在创建脚本时无法识别迁移

Entity framework core 实体框架核心:脚本迁移在创建脚本时无法识别迁移,entity-framework-core,entity-framework-migrations,Entity Framework Core,Entity Framework Migrations,我有一个完整的.NET Framework 4.6.2 Web API应用程序,我已将Entity Framework Core 1.1.2安装到该应用程序中。它包含一些类,一个DbContext类,并安装了相关的EF Core NuGet包 当我在Visual Studio中的package manager控制台中运行Add Migration Initial时,它会正确标识项目中的DbContext,并生成迁移类和快照。迁移看起来是正确的,因为在Up方法中,它显示了我想要的每个类的许多cre

我有一个完整的.NET Framework 4.6.2 Web API应用程序,我已将Entity Framework Core 1.1.2安装到该应用程序中。它包含一些类,一个DbContext类,并安装了相关的EF Core NuGet包

当我在Visual Studio中的package manager控制台中运行
Add Migration Initial
时,它会正确标识项目中的DbContext,并生成迁移类和快照。迁移看起来是正确的,因为在Up方法中,它显示了我想要的每个类的许多create表,它显示了每个类的预期列以及我期望的约束,所以看起来不错。此外,在Down方法中,它会删除所有表(这是第一次完成迁移,因此很有意义)。此迁移类是在项目的/Migrations目录中创建的

当我接下来在控制台中运行
脚本迁移
时,它会生成一个不正确的SQL脚本,因为它只为EFMigrationHistory创建表,如下所示:

IF OBJECT_ID(N'__EFMigrationsHistory') IS NULL
BEGIN
    CREATE TABLE [__EFMigrationsHistory] (
        [MigrationId] nvarchar(150) NOT NULL,
        [ProductVersion] nvarchar(32) NOT NULL,
        CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
    );
END;

GO
此SQL文件是在项目的bin/Debug目录中创建的

我希望此
脚本迁移
命令的输出包含迁移类中Up方法的SQL版本,该方法是由上一个
添加迁移初始
命令生成的,但遗憾的是,情况并非如此。如果我运行
updatedatabase
,它将针对此SQL文件运行,并继续忽略现有迁移

类似地,这似乎是EF Core的一个更大问题,因为如果我在运行
添加迁移
后尝试执行控制台中建议的
删除迁移
,它也无法找到它刚刚生成的迁移,并给出以下错误:

找不到ModelSnapshot

我知道这不可能,因为我在Migrations文件夹中看到了它以及它创建的初始迁移类

发生了什么事情?是否有任何已知的解决方法来让这些工具正常工作

更新


在测试过程中,我发现如果我创建了一个新的解决方案,其中只包含这几个部分,它就可以正常工作。但是,在我的原始解决方案中,我在许多解决方案文件夹中都有这些项目,因此这可能是当前的问题,因为将新项目放入解决方案文件夹会导致与本问题其余部分相同的问题。

您是否尝试添加
-Context
-project
?我添加了上下文,project和startupproject参数,但我仍然得到与问题中完全相同的SQL脚本,尽管迁移类本身看起来和预期的一样。我还尝试使用From和To参数(分别使用0和Initial)。它表示“未找到迁移'Initial',因此我尝试放置整个文件名,但它也不在乎。为此,我尝试将迁移类的整个路径放置在To参数中,但它也找不到。我认为问题更多的是它只是在错误的地方寻找迁移-是否有某种方法指定该目录?添加
-Verbose
是否提供了任何额外的线索?不,所有传递到EF函数的路径看起来都是正确的。经过一整天的实验,我发现如果这个项目位于解决方案的根目录下或单个解决方案文件夹中,它就可以正常工作。如果我把它放进一个嵌套的解决方案文件夹,它就会断开,我会得到与上面相同的结果。我的长期解决方法是将项目移动到根目录,重新启动VS,执行迁移,将其移回,然后再次重新启动VS。