C# EF核心-表';*__EFMigrationsHistory';不';不存在
我想强调的是,这是.NET内核,关于EF6.0的线程不适用于这个问题 我创建了DbContext并将其添加到DI中,但是当我执行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代码。在创建迁移表之后,一切都正常工作。这是坏的临时解决
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命令
- 如果删除表,但使用现有数据库(以前进行过迁移),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