MySQL EF Core – Table ‘*.__EFMigrationsHistory’ doesn’t exist错误


<!–

–>

MySQL EF Core – Table ‘*.__EFMigrationsHistory’ doesn’t exist错误

阅读更多:

问题现象

在使用 EF Core迁移时,可能会遇到以下错误:

Table '*.__EFMigrationsHistory' doesn't exist

这时候无法继续进行数据库迁移的操作。

(adsbygoogle = window.adsbygoogle || []).push({});

问题原因

这是由于 EF Core在进行迁移操作时,默认会在当前数据库中创建一个名为__EFMigrationsHistory的表,并在表中记录每次迁移的版本信息。但在一些情况下,这个表可能没有被正确创建,导致了问题的出现。

解决方案

在MySQL中,可以通过手动创建这个表的方式来解决这个问题。

方法一:手动创建表

在使用MySQL的命令行或者可视化工具中,输入以下命令:

CREATE TABLE __EFMigrationsHistory (
    MigrationId varchar(95) NOT NULL,
    ProductVersion varchar(32) NOT NULL,
    PRIMARY KEY (MigrationId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

这个命令会在当前数据库中创建一个名为__EFMigrationsHistory的表。

方法二:手动指定表名

在DbContext的OnConfiguring方法中,修改数据库连接字符串,手动指定__EFMigrationsHistory表的名称:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseMySQL("connection string here", options =>
    {
        options.MigrationsHistoryTable("__MyMigrationsHistory");
    });
}

这个方法会在迁移时使用指定的表名,而不是默认的__EFMigrationsHistory。

(adsbygoogle = window.adsbygoogle || []).push({});

总结

MySQL EF Core在进行迁移操作时,需要使用一个名为__EFMigrationsHistory的表来记录迁移的版本信息。如果出现Table ‘*.__EFMigrationsHistory’ doesn’t exist的错误,可以手动创建这个表或者在DbContext中手动指定表名。这个问题的解决方案比较简单,但需要注意的是在一些环境中,可能需要使用Root账户或者有足够的权限才能进行表的创建和修改。