在mysql数据库上运行迁移时,获取实体框架时出错“空间/全文/哈希索引和显式索引顺序的用法不正确”

cedebl8k  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(275)

问题
在对新安装的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数据库的更新,然后再尝试一次。

2nbm6dog

2nbm6dog1#

看到这个答案了吗
在此基础上,我创建一个inherit类,重写一个函数,并在configuration.cs上设置我的自定义类

plicqrtu

plicqrtu2#

那太容易了。我搜索了错误消息并找到了ef:spatial/fulltext/hash索引和显式索引顺序的不正确用法解释了消除错误的两个步骤——remove

.Index(t => t.Who_Id)

并添加

Sql("CREATE index `IX_Who_Id` on `AuditLog` (`Who_Id` DESC)");

我希望实体框架正在侦听并将修复代码。

ycggw6v2

ycggw6v23#

不确定是否能解决你的问题,但是
我想你应该重新考虑一下谁的身份,因为一根绳子会导致坏的身份。请看一下stackexchange关于建议解决方案的介绍。
当我有复杂的数据库并且我尝试用fluent api编写脚本时,我通常会遇到问题。我通常把它分解成步骤,首先是表,然后是索引,然后是关系。
这能解决你的问题吗,也许你可以发布一些ddl,这样我们可以更好地帮助你解决你的问题?

相关问题