我有一个完整的.NET Framework 4.6.2 Web API应用程序,我已将Entity Framework Core 1.1.2安装到其中。它包含一些类,一个DbContext类,并安装了相关的EF Core NuGet包。
当我在Visual Studio中的包管理器控制台中运行Add-Migration Initial
时,它正确识别项目中的DbContext并生成迁移类和快照。迁移看起来是正确的,因为在Up方法中,它为我想要的每个类显示了许多创建表,它显示了每个类的预期列和我期望的约束,因此看起来很好。此外,在Down方法中,它会丢弃所有表(这是有意义的,因为这是第一次完成迁移)。此迁移类在项目的/ Migrations目录中创建。
当我在控制台中运行Script-Migration
时,它会生成一个不正确的SQL脚本,因为它只为EFMigrationsHistory创建表,如下所示:
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目录中创建。
我希望这个Script-Migrations
命令的输出包含由前一个Add-Migrations Initial
命令生成的迁移类中的Up方法的SQL版本,但是,唉,情况并非如此。如果我运行Update-Database
,它将针对此SQL文件运行并继续忽略现有的迁移。
同样,这似乎是EF Core的一个更大的问题,因为如果我在运行Remove-Migration
后尝试按照控制台中的建议执行Add-Migration
,它也无法找到迁移它刚刚制作并给我以下错误:
未找到ModelSnapshot。
我知道情况并非如此,因为我在Migrations文件夹中看到它以及它创建的初始迁移类。
发生了什么,是否有任何已知的解决方法可以使这些工具正常工作?
更新
在测试时,我发现如果我创建一个只有这几个部分的新解决方案,它就可以正常工作。但是,在我最初的解决方案中,我在许多解决方案文件夹中都有这些项目,所以也许这就是问题所在,因为将新项目放在解决方案文件夹中导致在此问题的其余部分中观察到相同的问题。