簡體   English   中英

MySql上的EF Core`update-database`失敗,`__EFMigrationsHistory'不存在。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM