Получение ошибки Entity Framework при выполнении миграций в базе данных MySQL.«Неправильное использование пространственного / полнотекстового / хеш-индекса и явного порядка индекса» - PullRequest
0 голосов
/ 25 мая 2018

Проблема

При выполнении миграции на только что установленную базу данных MySQL (которая отлично работает на базе данных SQL Server) происходит сбой в первой создаваемой таблице с ошибкой:

Неправильное использование пространственного / полнотекстового / хеш-индекса и явного порядка индекса

Это происходит, когда он пытается запустить следующий 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, которую генерирует Entity Framework.

Я рад предоставить дополнительную информацию, если это необходимо.

Версии

  • MySql.Данные 6.10.7
  • MySql.Data.Entity 6.10.7
  • EntityFramework 6.2.0
  • MySql База данных 8.0.11 Сообщество

Обновление

Мне удалось запустить его на MySql вручную, выполнив команду SQL и заменив вызов .Index() при нацеливании на экземпляры MySql.

Однако даже после запускамиграции, по-видимому, успешныВ общем, MySql.Data (.Entity) продолжал выдавать ошибки во время выполнения.

При возврате БД к предыдущей основной версии MySql 5 код работает без каких-либо изменений.

Я подожду некоторое время, пока пакеты NuGet и база данных MySql обновятся, прежде чем делать это еще раз.

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

Не уверен, решит ли это вашу проблему, но

  1. Я думаю, вам нужно пересмотреть FK для Who_ID, поскольку строка создает плохие FK.Взгляните на StackExchange на предлагаемое решение.
  2. Обычно я сталкиваюсь с проблемами, когда у меня сложные базы данных, и я пытаюсь писать скрипты с помощью свободно распространяемого API.Я обычно делю это на шаги, сначала таблицы, затем индексы, а затем отношения.

Решает ли это вашу проблему, возможно, вы можете опубликовать некоторый DDL, чтобы мы могли лучше помочь вам решить вашу проблему

0 голосов
/ 09 августа 2018

см. ответ

. Здесь я создаю наследуемый класс, переопределяю функцию и устанавливаю свой пользовательский класс в файле configuration.cs

0 голосов
/ 28 мая 2018

Это слишком просто.Я искал сообщение об ошибке и обнаружил EF: неправильное использование пространственного / полнотекстового / хэш-индекса и явного порядка индекса объясняет два шага, чтобы избавиться от этой ошибки - удалить

.Index(t => t.Who_Id)

и добавьте

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

Я надеюсь, что Entity Framework прослушивает и исправит код.

...