中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

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)!

  1. mysql項目的依賴包
  2. 數據上下文和連接串
  3. 數據倉儲
  4. 添加模塊擴展
  5. 業務層注入
  6. 業務實現

mysql項目的依賴包(bao)

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

感謝各位閱讀!

回到目錄

posted @ 2017-07-12 11:49  張占嶺  閱讀(6067)  評論(1)    收藏  舉報