我正在使用EF代码优先迁移来在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 Server版本是8.0.11。
对于实体框架代码优先,我使用下面的包..
当我使用最新版本的MySql.Data(8.0.11)时,它给了我不同的错误:
提供程序未返回ProviderManifestToken字符串。
答案 0 :(得分:1)
您可以尝试运行Update-Database -verbose
来查看更多日志,并确定EF尝试使用CREATE INDEX `IX_id` on `Table` (`col_Id` DESC) using HASH
来执行脚本
此错误是由using HASH
引起的。
如果您尝试使用HASH创建索引,则MySQL Server返回以下消息。
错误代码:1221.错误地使用了空间/全文/哈希索引和显式索引顺序
在迁移脚本中找到.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"}))
这对我有用。