今天把一个之前基于 http://ASP.NET MVC 5 + EntityFramework 5 的项目里的 Nuget 包都升级了一下,包括将 EF 从 6.1.3 升级到 6.2.0,将 MySql.Data (用于 EF 连接 MySQL 数据库)从 6.9.9 升级到 8.0.12,MySql.Data.Entity 从 6.9.9 升级到 6.10.8,结果一运行就在连接数据库的代码上出现了错误,具体错误为:MethodAccessException: 方法“MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(System.Data.Common.DbConnection)”尝试访问方法“MySql.Data.MySqlClient.MySqlConnection.get_Settings()”失败。
折腾了半天(过程略去),终于在 StackOverflow 上找到了问题的原因:
原因就是:Oracle 在升级了 MySql.Data 到 8.x 版之后,并没有直接将原先配套使用的 MySql.Data.Entity 同样升级到 8.x,而是改名为了 MySql.Data.EntityFramework,所以需要在 Nuget 中先卸载原来的 MySql.Data.Entity,然后安装 MySql.Data.EntityFramework。除此之外,还需要在 Web.config 文件中做一些小改动,需要将下图中红色矩形标注的部分
改为蓝色矩形标注的部分(就是修改命名空间与版本号)
修改好之后,程序再次报错,错误为:The host xx.xx.xx.xx does not support SSL connections.
此时需要在 Web.config 的 connectionstring 设置中加上 sslmode=none。
升级 MySql.Data 相关包后的所有工作到此结束,程序又可以正常执行了。