【发布时间】:2018-11-04 14:33:30
【问题描述】:
问题
在对新安装的 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);
在Update-Database 上使用-verbose 标志后,我看到导致此错误的命令如下。
CREATE index `IX_Who_Id` on `AuditLog` (`Who_Id` DESC) using HASH
在线搜索对于解决这个问题并不是很有用。我见过的最接近的是this Stack Overflow question,但它对我不起作用。
背景
针对旧的(大约 3 年前)MySQL 数据库运行迁移工作正常,但是当我安装新的 MySQL 时,我收到有关密码身份验证的错误,这将通过更新 MySQL NuGet 包或强制执行该用户来解决使用旧密码。有关此问题,请参阅 here。
我将我的 MySQL NuGet 包更新到了最新版本,这导致了一个不同的错误(可以看到 here),我通过降级到比我开始使用的包更新的包解决了这个问题,但低于人们所使用的最新包提到 API 无法正常工作。
所以在这个阶段它连接良好,但似乎数据库本身不喜欢实体框架生成的索引命令。
如有必要,我很乐意提供更多信息。
版本
- MySql.Data 6.10.7
- MySql.Data.Entity 6.10.7
- EntityFramework 6.2.0
- MySql 数据库 8.0.11 社区
更新
我通过手动执行 SQL 命令并在针对 MySql 实例时替换 .Index() 调用,设法让它在 MySql 上运行。
然而,即使在显然成功运行迁移之后,MySql.Data(.Entity) 仍然会出现运行时错误。
将数据库恢复到以前的 MySql 5 主要版本时,代码可以完美运行,无需任何更改。
我会等待一段时间,让 NuGet 包和 MySql 数据库更新,然后再试一次。
【问题讨论】:
-
8.0 开始在索引声明中尊重
DESC。
标签: c# mysql entity-framework entity-framework-6 mysql-8.0