DotNetCore跨平臺~EFCore連(lian)接(jie)Mysql的方式(shi)
在.net frameworks的ef里(li)(li)連接mysql我們(men)已(yi)經測(ce)(ce)試(shi)通過了,而在dotnet core里(li)(li)的efCore上(shang)去(qu)連接mysql我們(men)需要測(ce)(ce)試(shi)一下,并且在測(ce)(ce)試(shi)過程中出現了一些問題,當然最后(hou)也(ye)是解決了,下面(mian)總(zong)結一下,分享給大家(jia)!
- mysql項目的依賴包
- 數據上下文和連接串
- 數據倉儲
- 添加模塊擴展
- 業務層注入
- 業務實現
mysql項目的依賴包(bao)
- Microsoft.EntityFrameworkCore
- MySql.Data.EntityFrameworkCore
數據上下文和連接串
對于mysql的(de)(de)上下(xia)文和(he)使用sql沒什么兩樣,需要注(zhu)意(yi)的(de)(de)是要添加的(de)(de)SSL的(de)(de)否定,否則同時會有異常出來
MySql.Data.MySqlClient.MySqlException: The host localhost does not support SSL connections.
public partial class MySqlERPContext : DbContext, IERPContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySQL(@"Server=localhost;database=ef;uid=root;pwd=root;SslMode=None"); base.OnConfiguring(optionsBuilder); } public DbSet<system_users> system_users { get; set; } public DbSet<User> Users { set; get; } }
數據倉儲
實現繼承(cheng)基礎設施里的(de)EFRepository就可以(yi)了(le)(le),我們需要為倉儲(chu)傳遞一個數據上(shang)下文進來,就是上(shang)面(mian)定義(yi)的(de)Mysql的(de)上(shang)下文對(dui)象,這(zhe)樣你的(de)倉儲(chu)就可以(yi)操作這(zhe)個上(shang)下文了(le)(le).
public class ERPRepository<T> : EFRepository<T> where T : class { public ERPRepository() : base(new MySqlERPContext()) { } }
添加模塊擴展
我們基礎(chu)設施(shi)里有(you)一些已經實現(xian)的(de)功能(neng),我們會做成擴展(zhan)方法,方便以業(ye)務(wu)系(xi)統的(de)使(shi)用(yong),而和(he)業(ye)務(wu)相(xiang)關的(de)對象,如(ru)業(ye)務(wu)倉儲,業(ye)務(wu)上下文(wen)可以在(zai)業(ye)務(wu)系(xi)統添(tian)加擴展(zhan),方法后(hou)期(qi)的(de)注入工作,一般(ban)的(de)業(ye)務(wu)擴展(zhan)代碼如(ru)下
/// <summary> /// 對于當前項目的模(mo)塊化(hua)擴(kuo)展(zhan) /// </summary> public static class ModuleExtensions { /// <summary> /// 注冊一個(ge)數據倉庫(ku) /// </summary> /// <param name="configuration"></param> /// <returns></returns> public static ModuleManager UseErpRepository(this ModuleManager configuration) { configuration.RegisterGenericModule( typeof(IRepository<>), typeof(ERPRepository<>)); return configuration; } /// <summary> /// 注(zhu)冊一個(ge)數據上下文 /// </summary> /// <param name="configuration"></param> /// <returns></returns> public static ModuleManager UseErpContext(this ModuleManager configuration) { configuration.RegisterModule<IERPContext, MySqlERPContext>(); return configuration; } }
業務層注入
模塊的擴展實現(xian)之后,就(jiu)是(shi)在(zai)業務系統初始化(hua)時注入(ru)它們,實現(xian)哪種方法就(jiu)去注冊哪里,一(yi)般在(zai)global或者(zhe)startup里去實現(xian)注入(ru)功能.
//注冊(ce)模塊 ModuleManager.Create() .UseAutofac() .UseESBIoC() .UseErpContext() .UseErpRepository();
業務實現
可以(yi)直接從模塊里把(ba)對(dui)應(ying)的倉儲取(qu)出來,然后執行對(dui)應(ying)的curd操作即可
ModuleManager.Resolve<IRepository<User>>().Insert(new Api.User { Name = "two" });
這樣我們在dotnet core里通過efcore去操作mysql數據庫就完成了,需要注意的是,在mysql連接串中,一定要添加SslMode=None這個屬性(xing),否(fou)則會(hui)啟用ssl鏈接(jie)!
感謝各位閱讀!