c# - MySql 上的 EF Core `update-database` 失败, `__EFMigrationsHistory' 不存在`

标签 c# mysql entity-framework asp.net-core entity-framework-core

我使用个人用户帐户身份在 .net core 1.1 中创建新项目。我在 Startup.cs 中添加 MySql 提供程序:

services.AddDbContext<ApplicationDbContext>(options => 
        options.UseMySQL(Configuration.GetConnectionString("DefaultConnection")));

但是当我尝试做 update-database 时,我得到这样的错误:

MySql.Data.MySqlClient.MySqlException: Table 'cloud.__EFMigrationsHistory' doesn't exist    at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
    at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
   at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
   at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   at MySql.Data.EntityFrameworkCore.Storage.Internal.MySQLRelationalCommand.Execute(IRelationalConnection connection, String executeMethod, IReadOnlyDictionary`2 parameterValues, Boolean closeConnection)
    at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
    at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrations() 
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
    at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType) 
   at Microsoft.EntityFrameworkCore.Tools.Cli.DatabaseUpdateCommand.<>c__DisplayClass0_0.<Configure>b__0()
    at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
    at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args)
 Table 'cloud.__EFMigrationsHistory' doesn't exist 

我该怎么办?

最佳答案

这与 ASP.NET Identity 或 ASP.NET Core 无关。这通常与 Entity Framework 有关。当您更新数据库时,EF 使用 __EFMigrationsHistory 来记录执行了哪些迁移,以便将来不会再次执行它们。

此功能由数据库提供程序 实现,而不是 EF 本身。至少有一种情况是 PostgresSQL 的 Npgsql 提供程序 didn't create the table .

解决方案很简单——自己创建表:

CREATE TABLE `__EFMigrationsHistory` 
( 
    `MigrationId` nvarchar(150) NOT NULL, 
    `ProductVersion` nvarchar(32) NOT NULL, 
     PRIMARY KEY (`MigrationId`) 
);

更新

还有一个 similar question在 2016 年。这是官方 MySQL 提供程序的错误。解决方法是创建表。也不是唯一的。例如,通过在不同的线程上运行异步操作来伪造它们。

我建议您调查第三方 MySQL 提供商,例如 Pomelo.EntityFrameworkCore.MySql .他们 found and fixed 1 年前的迁移历史错误。

鉴于 MySQL 的所有者是 Oracle,不要指望在连接器上取得很大进展。或者数据库。

关于c# - MySql 上的 EF Core `update-database` 失败, `__EFMigrationsHistory' 不存在`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46089982/

相关文章:

php - Codeigniter - 如何将多个数据从多个表传递到单个 View ?

Mysql5.5迁移至RDS/Aurora

C# SMO - 将表数据脚本化到文件。 throw 错误

c# - .NET List.Find 运行时错误

c# - Mono.Cecil:操作可能会在运行时不稳定

c# - 在 c# : expression evaluation function like flash script 中

mysql - MYSQL中如何计算百分比?

vb.net - 在Visual Studio 2013库中找不到 Entity Framework

c# - 在没有 DBSet 的情况下使用 c# linq 执行 SQL Server 存储过程

c# - 使用 Converter 时未注册 CollectionChanged 事件?