我使用EF代码优先迁移到MySQL上创建数据库模式。但是,当我执行更新数据库的命令时,它给出了错误,如下所示。
错误使用spatialfulltexthash索引和显式索引顺序。
我按照上面给出的所有步骤 支持MySQL
我曾试着在google上搜索,也在stackoverflow中搜索。但我不能得到永久的解决方案来解决这个问题。
<connectionStrings>
<add name="DefaultConnection" connectionString="Server=localhost;port=3306;database=testdb;Uid=root;password=*******;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
我使用的是MySQL Workbench 6.3.10。MySQL服务器的版本是8.0.11。
对于实体框架的代码第一,我使用下面的包。
当我使用最新版本的MySql.Data(8.0.11)时,它给了我不同的错误。
提供者没有返回一个ProviderManifestToken字符串。
你可以尝试运行 Update-Database -verbose
查看更多的日志,并确定EF尝试执行一个脚本与 CREATE INDEX `IX_id` on `Table` (`col_Id` DESC) using HASH
这个错误是由以下原因造成的 using HASH
.如果你尝试使用HASH创建索引,MySQL服务器会返回以下信息。
错误代码:1221。1221. 不正确使用spatialfulltexthash索引和显式索引顺序。
找出 .Index(t => t.col_Id)
或 CreateIndex("dbo.table", "col_Id")
迁移脚本中,并将其修改如下。
尽量使用 BTrees
像这样。
.Index(t => t.User_Id, anonymousArguments: new { Type = "BTrees"})
或者
CreateIndex("dbo.table", "col_Id" , anonymousArguments: new { Type = "BTrees"}))
这对我很有效。