[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