为了账号安全,请及时绑定邮箱和手机立即绑定

在 MySQL 数据库上运行迁移时出现实体框架错误。“空间/全文/哈希索引和显式索引顺序的错误使用”

在 MySQL 数据库上运行迁移时出现实体框架错误。“空间/全文/哈希索引和显式索引顺序的错误使用”

C#
慕码人2483693 2021-07-01 16:47:08
问题对新安装的 MySQL 数据库(对 SQL Server 数据库工作正常)运行迁移时,它在第一个创建表上失败并显示错误:空间/全文/哈希索引和显式索引顺序的错误使用当它尝试运行以下Index方法时会发生这种情况:CreateTable(    "dbo.AuditLog",    c => new    {        Id = c.Int(nullable: false, identity: true),        Name = c.String(maxLength: 1000, unicode: false),        What = c.String(maxLength: 1000, unicode: false),        When = c.DateTime(nullable: false, precision: 6),        Why = c.String(maxLength: 1000, unicode: false),        Where = c.Int(nullable: false),        Who_Id = c.String(maxLength: 128, unicode: false),    })    .PrimaryKey(t => t.Id)    .ForeignKey("dbo.AspNetUsers", t => t.Who_Id);    .Index(t => t.Who_Id);使用-verboseon 标志后Update-Database,我看到导致此错误的命令如下。CREATE index  `IX_Who_Id` on `AuditLog` (`Who_Id` DESC) using HASH在线搜索对于解决此问题并不是很有用。我见过的最接近的是这个 Stack Overflow 问题,但它对我不起作用。背景对旧的(大约 3 年前)MySQL 数据库运行迁移工作正常,但是当我安装新的 MySQL 时,我收到有关密码身份验证的错误,这可以通过更新 MySQL NuGet 包或强制用户使用旧版来解决密码。请参阅此处了解此问题。我将我的 MySQL NuGet 包更新到最新版本,这导致了一个不同的错误(可以在这里看到),我通过降级到比我开始使用的包更新但比最新版本低的包来解决这个问题,因为人们已经提到 API工作正常。所以在这个阶段它连接正常,但似乎数据库本身不喜欢实体框架生成的索引命令。如有必要,我很乐意提供更多信息。版本MySql.Data 6.10.7MySql.Data.Entity 6.10.7实体框架 6.2.0MySql 数据库 8.0.11 社区更新我设法通过手动执行 SQL 命令并.Index()在定位 MySql 实例时替换调用,使其在 MySql 上运行。然而,即使在显然成功运行迁移之后,MySql.Data(.Entity) 仍然继续给出运行时错误。将 DB 恢复到 MySql 5 的先前主要版本时,代码可以完美运行,无需任何更改。我将等待 NuGet 包和 MySql 数据库更新一段时间,然后再试一次。
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

在此我创建一个继承类,覆盖一个函数并在 configuration.cs 上设置我的自定义类


查看完整回答
反对 回复 2021-07-03
?
杨魅力

TA贡献1811条经验 获得超6个赞

不确定它是否会解决您的问题,但是

  1. 我认为您需要重新考虑 Who_ID 上的 FK,因为字符串会导致错误的 FK。在建议的解决方案上查看StackExchange

  2. 当我拥有复杂的数据库并尝试使用 fluent API 编写脚本时,我通常会遇到问题。我通常将其分为多个步骤,首先是表,然后是索引,然后是关系。

这是否解决了您的问题,也许您可以发布一些 DDL,以便我们更好地帮助您解决您的问题?


查看完整回答
反对 回复 2021-07-03
  • 3 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信