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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM