回到目錄 在.net frameworks的ef里連接mysql我們已經測試通過了,而在dotnet core里的efCore上去連接mysql我們需要測試一下,並且在測試過程中出現了一些問題,當然最後也是解決了,下麵總結一下,分享給大家! mysql項目的依賴包 數據上下文和連接串 對於mysql ...
在.net frameworks的ef里連接mysql我們已經測試通過了,而在dotnet core里的efCore上去連接mysql我們需要測試一下,並且在測試過程中出現了一些問題,當然最後也是解決了,下麵總結一下,分享給大家!
- mysql項目的依賴包
- 數據上下文和連接串
- 數據倉儲
- 添加模塊擴展
- 業務層註入
- 業務實現
mysql項目的依賴包
- Microsoft.EntityFrameworkCore
- MySql.Data.EntityFrameworkCore
數據上下文和連接串
對於mysql的上下文和使用sql沒什麼兩樣,需要註意的是要添加的SSL的否定,否則同時會有異常出來
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; } }
數據倉儲
實現繼承基礎設施里的EFRepository就可以了,我們需要為倉儲傳遞一個數據上下文進來,就是上面定義的Mysql的上下文對象,這樣你的倉儲就可以操作這個上下文了.
public class ERPRepository<T> : EFRepository<T> where T : class { public ERPRepository() : base(new MySqlERPContext()) { } }
添加模塊擴展
我們基礎設施里有一些已經實現的功能,我們會做成擴展方法,方便以業務系統的使用,而和業務相關的對象,如業務倉儲,業務上下文可以在業務系統添加擴展,方法後期的註入工作,一般的業務擴展代碼如下
/// <summary> /// 對於當前項目的模塊化擴展 /// </summary> public static class ModuleExtensions { /// <summary> /// 註冊一個數據倉庫 /// </summary> /// <param name="configuration"></param> /// <returns></returns> public static ModuleManager UseErpRepository(this ModuleManager configuration) { configuration.RegisterGenericModule( typeof(IRepository<>), typeof(ERPRepository<>)); return configuration; } /// <summary> /// 註冊一個數據上下文 /// </summary> /// <param name="configuration"></param> /// <returns></returns> public static ModuleManager UseErpContext(this ModuleManager configuration) { configuration.RegisterModule<IERPContext, MySqlERPContext>(); return configuration; } }
業務層註入
模塊的擴展實現之後,就是在業務系統初始化時註入它們,實現哪種方法就去註冊哪裡,一般在global或者startup里去實現註入功能.
//註冊模塊 ModuleManager.Create() .UseAutofac() .UseESBIoC() .UseErpContext() .UseErpRepository();
業務實現
可以直接從模塊里把對應的倉儲取出來,然後執行對應的curd操作即可
ModuleManager.Resolve<IRepository<User>>().Insert(new Api.User { Name = "two" });
這樣我們在dotnet core里通過efcore去操作mysql資料庫就完成了,需要註意的是,在mysql連接串中,一定要添加SslMode=None這個屬性,否則會啟用ssl鏈接!
感謝各位閱讀!