[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就可以了

 

posted @ 2018-08-23 11:35  二木erm  阅读(3122)  评论(0编辑  收藏  举报