• 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();
            }
        }
    
  • 相关阅读:
    堆栈详解
    结构体内存对齐
    const限定符
    硬盘及其分区(0819整理)
    Android编译环境搭建(0818-0819)
    wordpress导入模板数据
    git新建仓库
    android 镜像源
    js 获取浏览器可视窗口大小,滚动条高度
    jquery 获取浏览器可视窗口大小,滚动条高度
  • 原文地址:https://www.cnblogs.com/FreeSql/p/12447112.html
Copyright © 2020-2023  润新知