MySQL Entity Framework: не удается создать индекс - PullRequest
0 голосов
/ 25 сентября 2018

Я использую MySql.Data.Entity версии 6.10.8 с Entity Framework.Я делаю «Сначала код», чтобы MySql-провайдер создал структуру базы данных.Всякий раз, когда миграции содержат создание индекса, моя миграция завершается неудачно при выполнении команды update-database.Сообщение об ошибке и трассировка стека выглядят следующим образом:

System.FormatException: входная строка была в неправильном формате.
в System.Number.ParseDouble (строковое значение, параметры NumberStyles, NumberFormatInfo numfmt) в System.Convert.ToDouble (String value)
в MySql.Data.Entity.MySqlMigrationSqlGenerator.Generate (CreateIndexOperation op) в MySql.Data.Entity.MySqlMigrationSqlGenerator. <. ctor> b__22_l> at (my) at.Data.Entity.Операции IList`1, StringigrationId) в System.Data.Entity.Migrations.DbMigrator.ExecuteOperations (StringigrationId, VersionedModel targetModel, операции IEnumerable 1, системные операции IEnumerable 1, логическое понижение, логическое авто)
в System.Data.Entity.Migrations.DbMigrator.ApplyMigration (миграция DbMigration, DbMigration lastMigration) в System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration (миграция DbMigration, DbMigration lastMigration) в System.Data.EbM..Upgrade (IEnumerable 1 pendingMigrations, String targetMigrationId, String lastMigrationId)
в System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade (IEnumerable 1 pendingMigrations, строковый targetMigrationId, String lastMigrationEity *ata *d *).Migrations.DbMigrator.UpdateInternal (String targetMigration) в System.Data.Entity.Migrations.DbMigrator. <> C__DisplayClasse.b__d () в System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists (действие mustSucceedToKeepDate at)..Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists (Action mustSucceedToKeepDatabase) в System.Data.Entity.Migrations.DbMigrator.Update (String targetMigration) в System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update (String targetMigration) в System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore () в System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run () Входная строка была не в правильном формате.

Как повторить:
Использовать шведскую Windows (или любой другой язык, который не использует "." В качестве десятичного разделителя).

Создайте файл миграции с индексом, например:

CreateTable(
"dbo.AspNetRoles",
c => new
{
  Id = c.String(nullable: false, maxLength: 128, storeType: "nvarchar"),
  Name = c.String(nullable: false, maxLength: 256, storeType: "nvarchar"),
})
.PrimaryKey(t => t.Id)
.Index(t => t.Name, unique: true, name: "RoleNameIndex"); // This line causes the exception

Запустите обновление базы данных

(Отчет об ошибке был отправлен на MySql: https://bugs.mysql.com/bug.php?id=92561)

1 Ответ

0 голосов
/ 25 сентября 2018

Эта ошибка происходит из-за MySqlMigrationSqlGenerator.Generate (CreateIndexOperation op), который проверяет версию базы данных путем преобразования строки в значение double.Однако это происходит без указания IFormatProvider.Поскольку в шведском языке используется "," в качестве десятичного разделителя, это преобразование завершается неудачно (номер версии разделяется ".").

Переопределяя MySqlMigrationSqlGenerator.Generate (CreateIndexOperation op), этого можно избежать.Используйте код из этого ответа https://stackoverflow.com/a/51756143/1037864 (который является ответом на другой вопрос)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...