SqlSugar-C#版(四)_NET7_ASP.NET Core WebAPI使用SqlSugar仓储-IOC单例
1.SqlSugar-C#版(一)_安装与基础使用2.SqlSugar-C#版(二)_SqlSugar单例3.SqlSugar-C#版(三)_SeedData(种子数据)
4.SqlSugar-C#版(四)_NET7_ASP.NET Core WebAPI使用SqlSugar仓储-IOC单例
5.SqlSugar-哪个方法是实现了ADO.NET-MSSQL的SqlDataAdapter1、配置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模式下使用
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/17387171.html
合集:
ORM_SqlSugar
分类:
数据库-关系数据库+ORM框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下