问题
对新安装的 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);
使用-verbose
on 标志后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.7
- MySql.Data.Entity 6.10.7
- 实体框架 6.2.0
- MySql 数据库 8.0.11 社区
更新
.Index()
我通过手动执行 SQL 命令并在针对 MySql 实例时替换调用,设法让它在 MySql 上运行。
然而,即使在显然成功地运行迁移之后,MySql.Data(.Entity) 仍然继续给出运行时错误。
将数据库恢复到 MySql 5 的先前主要版本时,代码可以完美运行,无需任何更改。
我会等待一段时间让 NuGet 包和 MySql 数据库更新,然后再试一试。