AspNetCore 请求产生 FreeSql 所有操作 SQL 日志输出到前端
第一步:定义注入类型
public class CurdAfterLog : IDisposable
{
public static AsyncLocal<CurdAfterLog> Current = new AsyncLocal<CurdAfterLog>();
public StringBuilder Sb { get; } = new StringBuilder();
public CurdAfterLog()
{
Current.Value = this;
}
public void Dispose()
{
Sb.Clear();
Current.Value = null;
}
}
第二步:注入 CurdAfterLog
services.AddSingleton<IFreeSql>(fsql);
services.AddScoped<CurdAfterLog>();
第三步:添加 CurdAfter 事件
fsql.Aop.CurdAfter += (s, e) =>
{
CurdAfterLog.Current.Value?.Sb.AppendLine($"{Thread.CurrentThread.ManagedThreadId}: {e.EntityType.FullName} {e.ElapsedMilliseconds}ms, {e.Sql}");
};
便于管理 fsql.Aop.CurdAfter 应该和 new FreeSqlBuilder()..Build() 代码放在一起,并且该事件只绑定一次
第四步:在 Controller 中测试
public class ValuesController : ControllerBase
{
IFreeSql _fsql;
CurdAfterLog _curdLog;
public ValuesController(IFreeSql fsql, CurdAfterLog curdLog)
{
_fsql = fsql;
_curdLog = curdLog;
}
public ActionResult<string> Get(int id)
{
var item1 = _orm.Select<Song>().Where(a => a.Id == id).First();
var item2 = _orm.Select<Song>().Where(a => a.Id == id).First();
return _curdLog.Sb.ToString();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端