SqlSugar-C#版(四)_NET7_ASP.NET Core WebAPI使用SqlSugar仓储-IOC单例

1、配置IOC(Program.cs)

using SqlSugar;

namespace Test
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            ...
            // 方式一:
            builder.Services.AddSingleton<ISqlSugarClient>(s =>  // 配置SqlSugar方式一-》AddSingleton(SqlSugarScope)单例;SqlSugarScope实质为同一个上下文使用同一个对象;在不同上下文会自动New出不同的对象。
            {
                SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig()
                {
                    DbType = SqlSugar.DbType.Sqlite,  // 获取到数据库类型
                    ConnectionString = "DataSource=sqlsugar-dev.db",  // 获取到数据库字符串
                    IsAutoCloseConnection = true,  // 设置自定断开连接
                });
                return sqlSugar;
            });
            
            // 或者方式二:
            /*builder.Services.AddScoped<ISqlSugarClient>(s =>  // 配置SqlSugar方式二-》AddScoped(SqlSugarClient)每次请求开启一个
            {
                SqlSugarClient sqlSugar = new SqlSugarClient(new ConnectionConfig()
                {
                    DbType = SqlSugar.DbType.Sqlite,  // 获取到数据库类型
                    ConnectionString = "DataSource=sqlsugar-dev.db",  // 获取到数据库字符串
                    IsAutoCloseConnection = true,  // 设置自定断开连接
                });
                return sqlSugar;
            });*/

            ...
                
            var app = builder.Build();
            ...
            
            app.Run();
        }
    }
}

2、SqlSugar仓储类

/**
*┌──────────────────────────────────────────────────────────────┐
*│ 描    述:SqlSugar仓储层                                                   
*│ 作    者:执笔小白                                              
*│ 版    本:1.0                                       
*│ 创建时间:2023-05-08 15:40:56                            
*└──────────────────────────────────────────────────────────────┘
*┌──────────────────────────────────────────────────────────────┐
*│ 命名空间: Repository                              
*│ 类    名:BaseRepository                                     
*└──────────────────────────────────────────────────────────────┘
*/
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace fly_webapi.Repository
{
    /// <summary>
    /// ASP.NET Core仓储-单库模式
    /// SqlSugarScope
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class BaseRepository<T> : SimpleClient<T> where T : class, new()
    {
        ///// <summary>
        ///// 日志组件
        ///// </summary>
        //private readonly ILogger _logger;

        /// <summary>
        /// NetCore IOC模式创建仓储(AddSingleton单例IOC)-无日志(也可以直接用单例)
        /// </summary>
        /// <param name="context"></param>
        public BaseRepository(ISqlSugarClient context) : base(context)  // IOC那里已经是单例这里不需要再改成单例。
        {
            base.Context = context;
        }

        ///// <summary>
        ///// NetCore IOC模式创建仓储-有日志构造函数(需要打印SQL选这个)
        ///// </summary>
        ///// <param name="context"></param>
        ///// <param name="logger"></param>
        //public BaseRepository(ISqlSugarClient context, ILogger logger) : base(context)
        //{
        //    base.Context = context;
        //    _logger = logger;
        //    // 每次Sql执行前事件,记录进行的操作
        //    base.Context.Aop.OnLogExecuting = (sql, pars) =>
        //    {
        //        StringBuilder sqlStr = new();

        //        if (sql.StartsWith("UPDATE") || sql.StartsWith("INSERT"))
        //        {
        //            Console.ForegroundColor = ConsoleColor.Blue;
        //            sqlStr.AppendLine($"==============将要执行新增/修改操作==============");
        //        }
        //        if (sql.StartsWith("DELETE"))
        //        {
        //            Console.ForegroundColor = ConsoleColor.Red;
        //            sqlStr.AppendLine($"==============将要执行删除操作==============");
        //        }
        //        if (sql.StartsWith("SELECT"))
        //        {
        //            Console.ForegroundColor = ConsoleColor.Green;
        //            sqlStr.AppendLine($"==============将要执行查询操作==============");
        //        }
        //        sqlStr.AppendLine("【SQL预执行语句】:");
        //        sqlStr.AppendLine("    " + sql);
        //        sqlStr.AppendLine("【参数】:");
        //        string sqlPars = base.Context.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
        //        sqlStr.AppendLine("    " + sqlPars);

        //        Console.WriteLine(sqlStr.ToString());  // 打印
        //        Console.ForegroundColor = ConsoleColor.White;

        //        // 记录执行的信息
        //        _logger.LogCritical("\r\n 【开始打印仓储日志】:\r\n 【执行时间】:{0} \r\n 【SQL预执行语句】:{1} \r\n 【参数】:{2}", DateTime.Now.ToString(), sql, sqlPars);
        //    };

        //    // 每次Sql执行后事件,记录SQL执行完的信息
        //    base.Context.Aop.OnLogExecuted = (sql, pars) =>
        //    {
        //        // 执行时间超过1秒
        //        if (base.Context.Ado.SqlExecutionTime.TotalSeconds > 1)
        //        {
        //            StringBuilder sqlPStr = new();
        //            sqlPStr.AppendLine($"==============执行了下面的操作==============");
        //            var fileName = base.Context.Ado.SqlStackTrace.FirstFileName;           // 代码CS文件名
        //            sqlPStr.AppendLine("【代码CS文件名】:" + fileName);
        //            var fileLine = base.Context.Ado.SqlStackTrace.FirstLine;               // 代码行数
        //            sqlPStr.AppendLine("【代码行数】:" + fileLine);
        //            var FirstMethodName = base.Context.Ado.SqlStackTrace.FirstMethodName;  // 方法名
        //            sqlPStr.AppendLine("【方法名】:" + FirstMethodName);
        //            sqlPStr.AppendLine("【SQL执行语句】:");
        //            sqlPStr.AppendLine("    " + sql);
        //            sqlPStr.AppendLine("【参数】:");
        //            string sqlPars = base.Context.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value));
        //            sqlPStr.AppendLine("    " + sqlPars);

        //            // 打印
        //            Console.ForegroundColor = ConsoleColor.Green;
        //            Console.WriteLine(sqlPStr);
        //            Console.ForegroundColor = ConsoleColor.White;

        //            // 记录执行的信息
        //            _logger.LogCritical("\r\n 【结束打印仓储日志】:\r\n 【执行时间】:{0} \r\n 【SQL执行时间】:{1} \r\n 【代码CS文件名】:{2} \r\n 【代码行数】:{3} \r\n 【方法名】:{4} \r\n 【SQL执行语句】:{5} \r\n 【参数】:{6}",
        //                DateTime.Now.ToString(), base.Context.Ado.SqlExecutionTime.ToString(), fileName, fileLine, FirstMethodName, sql, sqlPars);
        //        }
        //    };

        //    // 记录SQL报错
        //    base.Context.Aop.OnError = (exp) =>
        //    {
        //        StringBuilder sqlStr = new();
        //        sqlStr.AppendLine($"==============数据库执行报错==============");
        //        sqlStr.AppendLine("【SQL执行语句】:");
        //        sqlStr.AppendLine("    " + exp.Sql);
        //        sqlStr.AppendLine("【参数】:");
        //        string sqlPars = JsonConvert.SerializeObject(exp.Parametres);
        //        sqlStr.AppendLine("    " + sqlPars);
        //        sqlStr.AppendLine("【报错信息】:");
        //        sqlStr.AppendLine("    " + exp.Message);
        //        sqlStr.AppendLine("【报错位置】:");
        //        string expStackTrace = exp.StackTrace.Substring(exp.StackTrace.LastIndexOf("\\") + 1, exp.StackTrace.Length - exp.StackTrace.LastIndexOf("\\") - 1);
        //        sqlStr.AppendLine("    " + expStackTrace);
        //        Console.ForegroundColor = ConsoleColor.Red;
        //        Console.WriteLine(sqlStr);  // 打印
        //        Console.ForegroundColor = ConsoleColor.White;

        //        // 记录执行的信息
        //        _logger.LogCritical("\r\n 【打印仓储sql报错日志】:\r\n 【执行时间】:{0} \r\n 【SQL执行语句】:{1} \r\n 【参数】:{2} \r\n 【报错信息】:{3} \r\n 【报错位置】:{4}", DateTime.Now.ToString(), exp.Sql, sqlPars, exp.Message, expStackTrace);
        //    };
        //}

        /// <summary>
        /// 扩展方法,自带方法不能满足的时候可以添加新方法
        /// </summary>
        /// <returns></returns>
        public List<T> CommQuery(string json)
        {
            //base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做复杂操作
            return null;
        }
    }
}

3、仓储使用示例

1)直接使用

2)仓储IOC模式下使用

  

 

posted @   ꧁执笔小白꧂  阅读(1057)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示