Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySql上的EF核心“更新数据库”失败,出现“EFMigrationsHistory';不';不存在`_C#_Mysql_Entity Framework_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# MySql上的EF核心“更新数据库”失败,出现“EFMigrationsHistory';不';不存在`

C# MySql上的EF核心“更新数据库”失败,出现“EFMigrationsHistory';不';不存在`,c#,mysql,entity-framework,asp.net-core,entity-framework-core,C#,Mysql,Entity Framework,Asp.net Core,Entity Framework Core,我在.NETCore1.1中使用个人用户帐户标识创建新项目。我在Startup.cs中添加了MySql提供程序: services.AddDbContext(选项=> options.UseMySQL(Configuration.GetConnectionString(“DefaultConnection”)); 但是当我尝试更新数据库时,我得到如下错误: MySql.Data.MySqlClient.MySqlException: Table 'cloud.__EFMigrationsHis

我在.NETCore1.1中使用个人用户帐户标识创建新项目。我在Startup.cs中添加了MySql提供程序:

services.AddDbContext(选项=>
options.UseMySQL(Configuration.GetConnectionString(“DefaultConnection”));
但是当我尝试更新数据库时,我得到如下错误:

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 
MySql.Data.MySqlClient.MySqlException:MySql.Data.MySqlClient.MySqlStream.ReadPacket()上不存在表“cloud.\uu EFMigrationsHistory”
位于MySql.Data.MySqlClient.NativeDriver.GetResult(Int32&affectedRow、Int64&insertedId)
位于MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId,Boolean force)
在MySql.Data.MySqlClient.MySqlDataReader.NextResult()中
位于MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior)
在MySql.Data.EntityFrameworkCore.Storage.Internal.MySQLRelationalCommand.Execute(IRelationalConnection连接,String executeMethod,iRelationalyDictionary`2参数值,Boolean closeConnection)
位于Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection连接,IReadOnlyDictionary`2参数值)
在Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrations()中
位于Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(字符串targetMigration)
位于Microsoft.EntityFrameworkCore.Design.MigrationOperations.UpdateDatabase(String targetMigration,String contextType)
在Microsoft.EntityFrameworkCore.Tools.Cli.DatabaseUpdateCommand.c__DisplayClass0_0.b_0()中
位于Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(字符串[]args)
位于Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(字符串[]args)
表“cloud.\u EFMigrationsHistory”不存在

我应该做什么?

这与ASP.NET标识或ASP.NET核心无关。这通常与实体框架有关。更新数据库时,EF使用
\uu EFMigrationsHistory
记录执行了哪些迁移,以便将来不再执行这些迁移

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

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

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

2016年还有一次。这是官方MySQL提供程序的一个bug。修复方法是创建表。也不是唯一的一个。例如,异步操作是通过在不同的线程上运行来伪造的

我建议您调查像这样的第三方MySQL提供商。他们在1年前发现了迁移历史错误


考虑到MySQL的所有者是Oracle,不要指望连接器会有很大的进展。或者数据库

这与ASP.NET核心或MySQL无关。当您尝试更新而不是创建数据库时,所有版本中都会出现实体框架错误。该消息解释了原因-EF用于检查已应用哪些迁移的迁移历史记录表丢失,但为什么会出现此错误?这是在模板中添加了标准asp.net核心标识的新项目。因为提供程序可能有错误,无法创建表。在.net core 1.1中使用asp.net身份的MySql是不可能的?我使用Pomelo.EntityFrameworkCore.MySql及其开始工作。谢谢哇,2020年。。。这个“官方”提供商完全是个笑话。只需使用Oracle提供程序直接遇到此错误。“现在我很想看到有人试图说服我这不是政治性的。”贾默让我这么说吧。。。Oracle是否从MySQL中获得了许可费?这就是为什么像real Backup这样的关键功能出现在每年5千美元的企业版中,以及为什么MySQL 8中的ROW_NUMBER()这样的分析和窗口功能花了8年时间才出现。你被Sql Server Express宠坏了我从来没有听说过工作代码被称为“宠坏”。