问题
在对新安装的mysql数据库(在sql server数据库中运行良好)运行迁移时,第一个create table失败,错误如下:
空间/全文/哈希索引和显式索引顺序的用法不正确
当它尝试运行以下命令时会发生这种情况 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
标志打开 Update-Database
,我看到导致此错误的命令如下。
CREATE index `IX_Who_Id` on `AuditLog` (`Who_Id` DESC) using HASH
网上搜索对解决这个问题没有多大帮助。我见过的最接近的问题是堆栈溢出问题,但它对我不起作用。
背景
对一个旧的(大约3年前)mysql数据库运行迁移可以很好地工作,但是当我安装新的mysql时,我遇到了关于密码验证的错误,这可以通过更新mysql nuget包或者强制用户使用遗留密码来解决。有关此问题,请参见此处。
我将mysql nuget包更新到了最新版本,这导致了一个不同的错误(可以在这里看到),我通过降级到一个比我开始使用的更新的包来解决这个问题,但是低于最新版本,因为人们已经提到api不能正常工作。
所以在这个阶段,它连接得很好,但数据库本身似乎不喜欢实体框架生成的index命令。
如果有必要,我很乐意提供更多的信息。
版本
mysql.data 6.10.7版本
mysql.data.entity 6.10.7版本
实体框架6.2.0
mysql数据库8.0.11社区
更新
我通过手动执行sql命令并替换 .Index()
针对mysql示例时调用。
然而,即使在运行迁移明显成功之后,mysql.data(.entity)仍然不断给出运行时错误。
当将数据库恢复到MySQL5以前的主要版本时,代码可以完美地工作,无需任何更改。
我将等待nuget包和mysql数据库的更新,然后再尝试一次。
3条答案
按热度按时间2nbm6dog1#
看到这个答案了吗
在此基础上,我创建一个inherit类,重写一个函数,并在configuration.cs上设置我的自定义类
plicqrtu2#
那太容易了。我搜索了错误消息并找到了ef:spatial/fulltext/hash索引和显式索引顺序的不正确用法解释了消除错误的两个步骤——remove
并添加
我希望实体框架正在侦听并将修复代码。
ycggw6v23#
不确定是否能解决你的问题,但是
我想你应该重新考虑一下谁的身份,因为一根绳子会导致坏的身份。请看一下stackexchange关于建议解决方案的介绍。
当我有复杂的数据库并且我尝试用fluent api编写脚本时,我通常会遇到问题。我通常把它分解成步骤,首先是表,然后是索引,然后是关系。
这能解决你的问题吗,也许你可以发布一些ddl,这样我们可以更好地帮助你解决你的问题?