[bug系列]Method not found: 'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommandBuilderFactory
bug由来
最近开始学习NetCore,想通过实战使用NetCore做一个集成数据库存储Redis缓存的WebApi项目,由于MSSQL的庞大体积,最终决定使用轻量级关系型数据库MySql。
所以最终方案是NetCore+EF+MySql(Redis缓存)完成这个项目
由于之前接触mysql甚少,也是从网上搜集资料学习
引用了Nuget
MySql.Data.EntityFrameworkCore
Pomelo.EntityFrameworkCore.MySql
由于这两个都是mysql,在概念混淆的情况下都引用了,这就出现了在数据库连接的时候出现了这个bug
贴上代码
public void ConfigureServices(IServiceCollection services) { var mysqlCon = Configuration.GetSection("ConnectionStrings:MySqlCon").Value; services.AddDbContext<Models.MainDBContext>(l => l.UseMySQL(mysqlCon)); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); }
因为同时用用了Mysql和Pomelo,在这个与数据库交互的地方出现了问题
追踪进去UseMySQL发现里面用的是MySql.Data.EntityFrameworkCore程序集
由于使用的NetCore版本是2.1,查询很多资料最终在国外网站得知MySql.Data.EntityFrameworkCore对NetCore2.1的支持并不完善,所以如果需要用到ef的话,推荐使用下面的
同时代码也修改为(标红部分)
public void ConfigureServices(IServiceCollection services) { var mysqlCon = Configuration.GetSection("ConnectionStrings:MySqlCon").Value; services.AddDbContext<Models.MainDBContext>(l => l.UseMySql(mysqlCon)); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); }
通过追踪
如果在数据迁移Migrations的时候也出现这个错误提示,那么问题是一样的,同样修改为小写的,引用Pomelo.EntityFrameworkCore.MySql就可以了