文章出處

回到目錄

在.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鏈接!

感謝各位閱讀!

回到目錄


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()