Initial Add-Migration 认为数据库已经是最新的
Initial Add-Migration thinks database is already up to date
我正在尝试在我的项目中完全重置 EF Core 代码优先迁移。我有充分的理由这样做(如果需要可以解释),但我很难让它发挥作用。
我删除了以前的数据库并删除了项目中的旧迁移目录。
查看下面的日志。向下大约四分之三,您会看到 EF 认为数据库已经是最新的。但是,您看到它一开始就创建了一个新的数据库吗?注意:我在日志末尾截断了很多,因为它只是堆栈跟踪错误,因为它找不到它认为应该已经存在的 table。
关于如何重新创建新的初始迁移和更新数据库的任何指导?
PM> Add-Migration InitialCreate
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
User profile is available. Using 'C:\Users\CollinB\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 2.0.1-rtm-125 initialized 'FilterListsDbContext' using provider 'Pomelo.EntityFrameworkCore.MySql' with options: MaxPoolSize=128 MigrationsAssembly=FilterLists.Api
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE DATABASE `filterlistsdata`;
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (33ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE `__EFMigrationsHistory` (
`MigrationId` varchar(95) NOT NULL,
`ProductVersion` varchar(32) NOT NULL,
CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`)
);
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (18ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='filterlistsdata' AND TABLE_NAME='__EFMigrationsHistory';
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT `MigrationId`, `ProductVersion`
FROM `__EFMigrationsHistory`
ORDER BY `MigrationId`;
Microsoft.EntityFrameworkCore.Migrations[20405]
**No migrations were applied. The database is already up to date.**
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
Failed executing DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM `languages` AS `l`)
THEN TRUE ELSE FALSE
END
MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'filterlistsdata.languages' doesn't exist ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'filterlistsdata.languages' doesn't exist
切勿手动删除迁移文件夹。它会让你省去很多麻烦;您使用代码优先创建数据库,因此使用代码优先删除。
首先,关闭 visual studio 然后重新打开。然后再次尝试 运行 您的迁移。
如果这不起作用,此时最简单的方法是转到 appsettings.json 并更改数据库的名称。然后 运行 再次添加迁移并更新数据库。
我明白了。当我 运行 初始添加迁移时,我没有意识到应用程序实际上 运行s。 运行宁我的一些 seed code 导致它失败。暂时注释掉允许我的初始创建 运行.
几乎所有可以解决的方法我都试过了。没有任何效果,因为我总是能够看到数据库,并且只创建了迁移 table。
解法:
我使用相同的 db_connection 字符串 创建了一个不同的解决方案,并使用 Add-Migration 构建所有 table 和Update-Database 命令。
后来我在现有项目中使用了它。
完美运行。
我正在尝试在我的项目中完全重置 EF Core 代码优先迁移。我有充分的理由这样做(如果需要可以解释),但我很难让它发挥作用。
我删除了以前的数据库并删除了项目中的旧迁移目录。
查看下面的日志。向下大约四分之三,您会看到 EF 认为数据库已经是最新的。但是,您看到它一开始就创建了一个新的数据库吗?注意:我在日志末尾截断了很多,因为它只是堆栈跟踪错误,因为它找不到它认为应该已经存在的 table。
关于如何重新创建新的初始迁移和更新数据库的任何指导?
PM> Add-Migration InitialCreate
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
User profile is available. Using 'C:\Users\CollinB\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 2.0.1-rtm-125 initialized 'FilterListsDbContext' using provider 'Pomelo.EntityFrameworkCore.MySql' with options: MaxPoolSize=128 MigrationsAssembly=FilterLists.Api
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE DATABASE `filterlistsdata`;
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (33ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE `__EFMigrationsHistory` (
`MigrationId` varchar(95) NOT NULL,
`ProductVersion` varchar(32) NOT NULL,
CONSTRAINT `PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`)
);
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (18ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='filterlistsdata' AND TABLE_NAME='__EFMigrationsHistory';
Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT `MigrationId`, `ProductVersion`
FROM `__EFMigrationsHistory`
ORDER BY `MigrationId`;
Microsoft.EntityFrameworkCore.Migrations[20405]
**No migrations were applied. The database is already up to date.**
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
Failed executing DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM `languages` AS `l`)
THEN TRUE ELSE FALSE
END
MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'filterlistsdata.languages' doesn't exist ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Table 'filterlistsdata.languages' doesn't exist
切勿手动删除迁移文件夹。它会让你省去很多麻烦;您使用代码优先创建数据库,因此使用代码优先删除。
首先,关闭 visual studio 然后重新打开。然后再次尝试 运行 您的迁移。
如果这不起作用,此时最简单的方法是转到 appsettings.json 并更改数据库的名称。然后 运行 再次添加迁移并更新数据库。
我明白了。当我 运行 初始添加迁移时,我没有意识到应用程序实际上 运行s。 运行宁我的一些 seed code 导致它失败。暂时注释掉允许我的初始创建 运行.
几乎所有可以解决的方法我都试过了。没有任何效果,因为我总是能够看到数据库,并且只创建了迁移 table。
解法: 我使用相同的 db_connection 字符串 创建了一个不同的解决方案,并使用 Add-Migration 构建所有 table 和Update-Database 命令。 后来我在现有项目中使用了它。
完美运行。