mysql - 创建索引时,具有 mysql 数据库迁移的实体框架失败
问题描述
是什么导致 MySQL 与实体框架出现此错误?我可以生成迁移脚本并连接到数据库,但它不喜欢在尝试创建索引时生成的特别“散列”的 SQL。
例子:
CREATE index `IX_Facility_ID` on `Contact.Address` (`Facility_ID` DESC) using HASH
错误:
MySql.Data.MySqlClient.MySqlException (0x80004005):空间/全文/哈希索引和显式索引顺序的使用不正确
有没有办法解决?这是 EF 6 和最新的 mysql dll。
解决方案
我遇到了同样的问题,在阅读帖子后,我决定创建一个继承 MySqlMigrationSqlGenerator 的类并覆盖受保护的覆盖 MigrationStatement Generate ( CreateIndexOperation op ),然后在配置迁移时添加:SetSqlGenerator ( "MySql.Data.MySqlClient", new myMigrationSQLGenerator ( ) );
这是类的代码:
public class myMigrationSQLGenerator : MySqlMigrationSqlGenerator
{
private string TrimSchemaPrefix ( string table )
{
if ( table.StartsWith ( "dbo." ) )
return table.Replace ( "dbo.", "" );
return table;
}
protected override MigrationStatement Generate ( CreateIndexOperation op )
{
var u = new MigrationStatement ( );
string unique = ( op.IsUnique ? "UNIQUE" : "" ), columns = "";
foreach ( var col in op.Columns )
{
columns += ( $"`{col}` DESC{( op.Columns.IndexOf ( col ) < op.Columns.Count - 1 ? ", " : "" )}" );
}
u.Sql = $"CREATE {unique} INDEX `{op.Name}` ON `{TrimSchemaPrefix ( op.Table )}` ({columns}) USING BTREE";
return u;
}
}
这是Migrations\Configuration.cs上的代码:
public Configuration ()
{
AutomaticMigrationsEnabled = false;
SetSqlGenerator ( "MySql.Data.MySqlClient", new myMigrationSQLGenerator ( ) );
}
这对我有用。
推荐阅读
- java - Java JNA - 检测注册表值何时更改
- python - 没有scapy模块的python dns嗅探器
- android - FusedLocationProvider 返回 null
- asp.net-core - Visual Studio 2017 显示 Blazor 错误但编译
- php - 克隆 Laravel 项目并安装 composer 和 npm 然后也给我错误 500 page not found
- pyspark - Apache Zeppelin Spark java.lang.NoSuchMethodError: io/netty/buffer/PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric;
- excel - 使用样式将 TypeScript 导出到 Excel
- angularjs - angularJS 过滤器和 $http
- eclipse - 运行 Spring Boot 应用程序时如何解决 STS 控制台中的奇怪字符问题?
- android - 更新应用程序后如何更改 CheckBoxPreference 的值