我使用个人用户帐户身份在 .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/