1. 程式人生 > >DotNetCore跨平臺~EFCore連線Mysql的方式

DotNetCore跨平臺~EFCore連線Mysql的方式

回到目錄

在.net frameworks的ef裡連線mysql我們已經測試通過了,而在dotnet core裡的efCore上去連線mysql我們需要測試一下,並且在測試過程中出現了一些問題,當然最後也是解決了,下面總結一下,分享給大家!

  1. mysql專案的依賴包
  2. 資料上下文和連線串
  3. 資料倉儲
  4. 新增模組擴充套件
  5. 業務層注入
  6. 業務實現

mysql專案的依賴包

  1. Microsoft.EntityFrameworkCore
  2. 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連結!

感謝各位閱讀!

回到目錄