我正在使用mysql.data.entity版本6.10.8和entity framework。我正在做“代码优先”让mysql提供者创建数据库结构。每当迁移包含索引的创建时,运行update database命令时,我的迁移就会失败。错误消息和堆栈跟踪如下:
system.formatexception:输入字符串的格式不正确。
在system.convert.todouble(字符串值)处的system.number.parsedouble(字符串值、numberstyles选项、numberformatinfo numfmt)
在mysql.data.entity.mysqlmigrationsqlgenerator.generate(createindexoperation op)在mysql.data.entity.mysqlmigrationsqlgenerator.<.ctor>b_u22_4(migrationoperation>op)在mysql.data.entity.mysqlmigrationsqlgenerator.generate(ienumerable 1 migrationoperations,system.data.entity.migrations.infrastructure.migratorbase.generatestatements(ilist1 operations,string migrationid)的system.data.entity.migrations.infrastructure.migratorbase.generatestatements(ilist
1 operations,string migrationid)的字符串providermanifesttoken,versionedmodel targetmodel、ienumerable 1操作、ienumerable 1系统操作、布尔降级、布尔自动)
在system.data.entity.migrations.dbmigrator.applymigration(dbmigration migration,dbmigration lastmigration)在system.data.entity.migrations.infrastructure.migratorloggingdecorator.applymigration(dbmigration migration,dbmigration lastmigration)在system.data.entity.migrations.dbmigrator.upgrade(ienumerable 1 pendingmigrations,字符串targetmigrationid,字符串lastmigrationid)
位于system.data.entity.migrations.infrastructure.migratorloggingdecorator.upgrade(ienumerable 1 pendingmigrations,string targetmigrationid,string lastmigrationid)
位于system.data.entity.migrations.dbmigrator.updateinternal(string targetmigration),位于system.data.entity.migrations.dbmigrator.<>c\u displayclasse.b\u d(),位于system.data.entity.migrations.dbmigrator.ensuredatabaseexists(action mustsucceedtoeDepDatabase),位于system.data.entity.migrations.infrastructure.migratorbase.ensuredatabaseexists(action在system.data.entity.migrations.design.toolingfacade.baserunner.run()输入中,必须在system.data.entity.migrations.infrastructure.migratorbase.update(string targetmigration)在system.data.entity.migrations.design.toolingfacade.updaterunner.runcore()处成功(字符串targetmigration)字符串格式不正确。
如何重复:
使用瑞典语窗口(或任何其他不使用“.”作为小数分隔符的语言)。
创建带有索引的迁移文件,例如:
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条答案
按热度按时间06odsfpq1#
此错误是由于mysqlmigrationsqlgenerator.generate(createindexoperation op)导致的,它通过将字符串转换为double来检查数据库的版本。但是,它这样做时不指定iformatprovider。由于瑞典语使用“,”作为十进制分隔符,此转换失败(版本号用“.”分隔)。
通过重写mysqlmigrationsqlgenerator.generate(createindexoperation op),可以避免这种情况。使用此答案中的代码https://stackoverflow.com/a/51756143/1037864 (这是另一个问题的答案)