<!–
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账户或者有足够的权限才能进行表的创建和修改。