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