![](/img/trans.png)
[英]EF Core - Table '*.__EFMigrationsHistory' doesn't exist
[英]EF Core `update-database` on MySql fails with `__EFMigrationsHistory' doesn't exist`
我在.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標識或ASP.NET Core無關。 通常,這與實體框架有關。 當您更新數據庫時,EF使用__EFMigrationsHistory
記錄執行了哪些遷移,因此以后不再執行它們。
此功能由數據庫提供程序而不是EF本身實現。 至少有一種情況是PostgresSQL的Npgsql提供者沒有創建表 。
解決方案很簡單-自己創建表:
CREATE TABLE `__EFMigrationsHistory`
(
`MigrationId` nvarchar(150) NOT NULL,
`ProductVersion` nvarchar(32) NOT NULL,
PRIMARY KEY (`MigrationId`)
);
UPDATE
2016年還有另一個 類似的問題 。這是官方MySQL提供程序的錯誤。 解決方法是創建表。 也不是唯一的一個。 例如,通過在不同的線程上運行異步操作來偽造它們。
我建議您調查諸如Pomelo.EntityFrameworkCore.MySql的第三方MySQL提供程序。 他們發現並修復了1年前的遷移歷史記錄錯誤。
鑒於MySQL的所有者是Oracle ,不要期望連接器會取得很大的進步。 還是數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.