C# EF核心-表';*__EFMigrationsHistory';不';不存在

C# EF核心-表';*__EFMigrationsHistory';不';不存在,c#,mysql,entity-framework,entity-framework-core,.net-core,C#,Mysql,Entity Framework,Entity Framework Core,.net Core,我想强调的是,这是.NET内核,关于EF6.0的线程不适用于这个问题 我创建了DbContext并将其添加到DI中,但是当我执行dotnet ef数据库更新-v时,它不希望创建迁移表\uEFMigrationsHistory 我是否应该首先执行其他命令,或者这是EF Core MySQL适配器的错误 MainDbContext 临时溶液 通过执行dotnet ef migrations script我得到了可以直接在MySQL中执行的SQL代码。在创建迁移表之后,一切都正常工作。这是坏的临时解决

我想强调的是,这是.NET内核,关于EF6.0的线程不适用于这个问题

我创建了DbContext并将其添加到DI中,但是当我执行
dotnet ef数据库更新-v
时,它不希望创建迁移表
\uEFMigrationsHistory

我是否应该首先执行其他命令,或者这是EF Core MySQL适配器的错误

MainDbContext 临时溶液
通过执行
dotnet ef migrations script
我得到了可以直接在MySQL中执行的SQL代码。在创建迁移表之后,一切都正常工作。这是坏的临时解决方案。我仍然想知道启用迁移的“正确”方法是什么。

在使用标准Oracle提供程序时遇到了相同的问题

根据这个问题,它还没有实现迁移功能

我按照建议转到SapientGuardian提供商,现在看来这确实是最好的方式


编辑:如评论所示,从2018年起,柚子是最佳选择。从我最初的回答开始,我就选择了它,而不是其他提供商。

与官方的Oracle MySQL提供商有同样的问题

刚刚添加的软件包:安装软件包SapientGuardian.EntityFrameworkCore.MySql
移民成功了

把马克·G的评论变成了答案

创建_EFMigrationsHistory表后,应运行其余更新

CREATE TABLE `__EFMigrationsHistory` ( `MigrationId` nvarchar(150) NOT NULL, `ProductVersion` nvarchar(32) NOT NULL, PRIMARY KEY (`MigrationId`) );
或者,在Package Manager控制台中使用以下命令生成迁移脚本并手动应用于数据库:

Script-Migration
如果需要生成所有脚本,可以使用以下命令:

Script-Migration -from 0

我遇到了同样的问题,OP上下文可能略有不同,但为了完整起见,这里是我的答案

遇到此问题的一种方法是:

  • 创建迁移并更新数据库
  • 后来由于某种原因,您删除了表(而不是数据库),并再次尝试运行updatedatabase命令
在这种情况下,您将得到OP报告的错误

MySql.Data.MySqlClient.MySqlException:表 “db.\u EFMigrationsHistory”不存在

在这种情况下,的解决方案是删除完整的数据库。之后,“更新数据库”命令将成功运行

我不确定它是否仅与mysql相关,但要继续:

  • 如果删除表,但使用现有数据库(以前进行过迁移),update命令将为您提供异常
  • 如果删除完整的数据库,update命令将正常运行

    • 我也有同样的问题,但环境略有不同

      问题是,在运行迁移之前,我尝试使用已经存在的数据库运行迁移

      简言之,
      确保您没有自己创建数据库。让迁移为您完成它。

      来自PHP/Laravel的背景,这对我来说并不明显:)



      如果您对my environment感兴趣,请在MacOS上安装MySQL server。

      请指定您使用的软件包版本。此连接字符串是否允许您访问具有创建表权限的帐户?换句话说,您是否能够使用此连接字符串手动创建表?@Deilan I added packages.json。当然,我对数据库有完全权限。一旦我手动添加表,迁移工作和我的
      用户
      模型表就会为我创建,我可以使用它进行操作。@Stan我刚刚遇到了ef core+mysql的相同问题,尝试执行添加迁移工作正常,但更新数据库会引发此错误解决方法是在运行之前手动创建下表“dotnet ef数据库更新”
      创建表“\uu EFMigrationHistory”(`MigrationId`nvarchar(150)不为空,`ProductVersion`nvarchar(32)不为空,主键(`MigrationId`))
      我将此标记为一个答案,但我认为最好是直接手动执行脚本一次。我很确定这个错误已经修复。不幸的是,看起来Oracle根本不在乎,上次我检查时也不在乎。如果您已经有了最终的db结构,您可以手动执行脚本一次。在我的情况下,它是s不断变化(系统有一些初始形状,但测试阶段有很多变化,因此orm必须相应更新)。很高兴有人证明可以坚持使用默认提供商。祝你好运!Pomelo现在是推荐的提供商。不。它还没有修复。是的,
      Pomelo.EntityFrameworkCore.MySql
      似乎是ms推荐的,下载量超过oracle和SapientGuardian,git明星也更多,下载频率也更高官方MySql软件包仍然存在问题,但Pomelo似乎可以工作Pomelo现在是推荐的软件包:@Softlion截至2018年底,Pomelo正在寻找能够维护该项目的人这为我解决了问题。+1来自我:)这很有帮助..有了aspnet core..最新版本更好..所以请始终查看最近的回复或帖子。您的解决方案适用于不仅仅是mysql。我一直在绞尽脑汁想弄清楚为什么我不能让postgres正确迁移。在我的情况下,我可以在windows 10上本地运行,但在RHEL6上运行时却遇到了阻塞。在这种情况下,删除模式(大致上就像删除表一样)在windows中工作,但不是RHEL,只有当我删除数据库本身时,事情才开始工作。只需确保您使用的用户具有服务器级权限来创建,它工作得很好!
      Script-Migration
      
      Script-Migration -from 0