企業項目實戰 .Net Core + Vue/Angular 分庫分表日誌系統三 | 控制反轉搭配簡單業務

教程

01 | 模塊化方案一html

02 | 模塊化方案二git

其餘教程預覽

分庫分表項目實戰教程

Git地址: https://github.com/MrChuJiu/EasyLogger

01 | 前言github

02 | 簡單的分庫分表設計sql

03 | 控制反轉搭配簡單業務數據庫

04 | 強化設計方案json

05 | 完善業務自動建立數據庫api

06 | 最終篇-經過AOP自動鏈接數據庫-完成日誌業務app

說明

咱們上一節已經成功經過 鏈接提供程序存儲庫,獲取到了 鏈接提供程序,可是鏈接提供程序和數據庫鏈接依賴太深,這一節咱們把它解決掉。async

如何控制反轉

1.在 EasyLogger.SqlSugarDbStorage 類庫新建 ISqlSugarSetting 和 SqlSugarSetting (SqlSugar設置)

public interface ISqlSugarSetting
    {
        /// <summary>
        /// 配置名稱Kety
        /// </summary>
        string Name { get; set; }
        /// <summary>
        /// 數據庫鏈接字符串
        /// </summary>
        string ConnectionString { get; set; }
        /// <summary>
        /// 數據庫類型呢
        /// </summary>
        DbType DatabaseType { get; set; }
        /// <summary>
        /// 使用Sql執行日誌
        /// </summary>
        Action<string, SugarParameter[]> LogExecuting { get; set; }
    }
    public class SqlSugarSetting : ISqlSugarSetting
    {
        public string Name { get; set; }
        public string ConnectionString { get; set; }
        public DbType DatabaseType { get; set; }
        public Action<string, SugarParameter[]> LogExecuting { get; set; }
    }

2.而後修改咱們的 SqlSugarProvider類 在構造函數傳遞配置進來。

public SqlSugarProvider(ISqlSugarSetting SugarSetting)
        {
            this.Sugar = this.CreateSqlSugar(SugarSetting);
            this.ProviderName = SugarSetting.Name;
        }

        private SqlSugarClient CreateSqlSugar(ISqlSugarSetting SugarSetting)
        {
       
            var db = new SqlSugarClient(
             new ConnectionConfig()
             {
                 ConnectionString = SugarSetting.ConnectionString,
                 DbType = SugarSetting.DatabaseType,//設置數據庫類型
                 IsAutoCloseConnection = true,//自動釋放數據務,若是存在事務,在事務結束後釋放
                 InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列信息
             });

            //用來打印Sql方便你調式    
            db.Aop.OnLogExecuting = SugarSetting.LogExecuting;
            return db;
        }

3.改造咱們的依賴注入部分。

services.AddSingleton<ISqlSugarProvider>(new SqlSugarProvider(new SqlSugarSetting() {

                Name = SqlSugarDbStorageConsts.DefaultProviderName,
                ConnectionString = @$"Data Source=",
                DatabaseType = DbType.Sqlite,
                LogExecuting = (sql, pars) =>
                {
                    Console.WriteLine($"sql:{sql}");
                }

            }));

app.Use(async (context, next) =>
    {
          var sqlStorage = app.ApplicationServices.GetService<ISqlSugarProviderStorage>();
          var sugarClient = sqlStorage.GetByName(null, SqlSugarDbStorageConsts.DefaultProviderName).Sugar;
          Console.WriteLine("查看sugarClient");
    });

4.鏈接多個數據庫。

尾聲

就這?控制反轉就實現完了,如今咱們 SqlSugar鏈接提供程序 的數據庫鏈接串交給上層來提供ide

加一點業務試試

1.在EasyLogger.Api新建Model文件夾 而後新建實體類

public class EasyLoggerProject
    {
        [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] 
        public int Id { get; set; }
        /// <summary>
        /// 項目名稱
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 系統編碼
        /// </summary>
        public string Code { get; set; }

    }

2.在AppSetting.json裏面加入

"EasyLogger": {
    "DbName": "EasyLogger", // 數據庫名稱
  },

補:PathExtenstions.GetApplicationCurrentPath()方法代碼/這裏是爲了讓系統中使用的路徑統一,方便那天要改一頓Ctrl+C

return AppDomain.CurrentDomain.BaseDirectory + "../";

3.修改StartUp中咱們的連接字符串 我使用的是SqlLite

var defaultDbPath = Path.Combine(PathExtenstions.GetApplicationCurrentPath(), $"{Configuration["EasyLogger:DbName"]}.db");

            services.AddSingleton<ISqlSugarProvider>(new SqlSugarProvider(new SqlSugarSetting()
            {

                Name = SqlSugarDbStorageConsts.DefaultProviderName,
                ConnectionString = @$"Data Source={defaultDbPath}",
                DatabaseType = DbType.Sqlite,
                LogExecuting = (sql, pars) =>
                {
                    Console.WriteLine($"sql:{sql}");
                }

            }));

4.判斷目錄下是否存在Db文件、若是不存在就建立數據庫/建立表

if (!File.Exists(defaultDbPath))
            {
                var db = new SqlSugarClient(new ConnectionConfig()
                {
                    ConnectionString = @$"Data Source={defaultDbPath}",
                    DbType = DbType.Sqlite,
                    IsAutoCloseConnection = true, // 自動釋放數據務,若是存在事務,在事務結束後釋放
                    InitKeyType = InitKeyType.Attribute// 從實體特性中讀取主鍵自增列信息
                });

                db.CodeFirst.BackupTable().InitTables<EasyLoggerProject>();

                db.Dispose();
            }

5.新建控制器ProjectController,而後經過函數注入拿到SqlSugar直接調用添加/查詢。


思考

來回這麼久第一次運行代碼是否是很激動,先不要着急咱們來看看這個代碼,看上去好像沒問題,咱們使用接口構造函數注入了實現,還能夠正常訪問數據庫,我若是要切換數據庫我就在GetByName裏換個名字就能夠了。
可是不要忘了咱們的口號:易擴展、切換快、可共存。
這切換個ORM,業務代碼所有梭哈!

結尾

問題你們已經看到了,怎麼改造呢?你們在先把如今寫的代碼消化一下,接下來咱們就要開始改造咱們的代碼了!

相關文章
相關標籤/搜索