EF6搭配MySQL更新数据库触发FormatException问题求助
解决EF6 + MySQL8.0更新数据库时的FormatException问题
这个问题我之前帮同事排查过,核心原因是你使用的MySQL.Data v6.10.9版本和MySQL 8.0.18存在兼容性冲突——旧版本的MySQL EF Provider在处理MySQL 8.x的版本号解析时会触发格式转换错误,堆栈里的System.Number.ParseDouble调用就是最直接的证据,它在尝试把MySQL版本号转换为double类型时失败了。
解决方案步骤
1. 升级MySQL相关NuGet包到兼容MySQL 8.x的版本
旧版的MySQL.Data v6.x对MySQL 8.x的支持不完善,必须升级到8.0.x系列版本,建议和你的MySQL服务器版本(8.0.18)保持一致,避免版本差异带来的其他问题:
- 通过NuGet包管理器控制台执行以下命令:
如果你用的是Visual Studio的图形化NuGet管理器,直接搜索这两个包并选择对应版本安装即可。Install-Package MySQL.Data -Version 8.0.18 Install-Package MySQL.Data.Entity -Version 8.0.18
2. 验证EF配置文件的正确性
升级完成后,检查你的App.config或Web.config中的Entity Framework配置,确保provider指向正确的MySQL EF6驱动:
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>
同时确认连接字符串的providerName是MySql.Data.MySqlClient:
<connectionStrings> <add name="DBModel" connectionString="server=localhost;port=3306;database=your_db;uid=root;pwd=your_password;" providerName="MySql.Data.MySqlClient" /> </connectionStrings>
3. 清理旧迁移并重新生成(可选但推荐)
如果之前的迁移文件是基于旧驱动生成的,可能残留兼容性问题,建议清理后重新生成:
- 删除项目中
Migrations文件夹下的所有迁移文件(保留Configuration.cs如果有自定义配置) - 在NuGet控制台执行:
Enable-Migrations -Force # 如果之前已启用过迁移,这一步会重置配置 Add-Migration InitialCreate Update-Database
补充说明
MySQL 8.x引入了一些新特性(比如默认身份认证插件变更),旧版本的驱动不仅会在版本号解析上出问题,还可能遇到身份认证、语法支持等其他兼容性问题,所以升级驱动是最根本的解决办法。
内容的提问来源于stack exchange,提问作者Kris_1313
相关产品推荐
相关产品推荐

