AspNetCore 請求產生 FreeSql 全部操做日誌輸出到前端

FreeSql是一個功能強大的 .NET ORM 功能庫,支持 .NetFramework 4.0+、.NetCore 2.1+、Xamarin 等支持 NetStandard 全部運行平臺。html

特性git

  • 支持 CodeFirst 遷移;
  • 支持 DbFirst 從數據庫導入實體類,支持三種模板生成器;
  • 採用 ExpressionTree 高性能讀取數據;
  • 支持深刻的類型映射,好比pgsql的數組類型,堪稱匠心製做;
  • 支持豐富的表達式函數;
  • 支持導航屬性查詢,和延時加載;
  • 支持同步/異步數據庫操做方法,豐富多彩的鏈式查詢方法;
  • 支持讀寫分離、分表分庫,租戶設計;
  • 支持多種數據庫,MySql/SqlServer/PostgreSQL/Oracle/Sqlite/達夢/MsAccess;

開源地址:https://github.com/2881099/FreeSqlgithub

第一步:定義注入類型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();
        }
    }

參考資料

《新人學習指引》 \ 《Select》 \ 《Update》 \ 《Insert》 \ 《Delete》
《表達式函數》 \ 《CodeFirst》 \ 《DbFirst》 \ 《BaseEntity》
《Repository》 \ 《UnitOfWork》 \ 《過濾器》 \ 《樂觀鎖》 \ 《DbContext》
《讀寫分離》 \ 《分區分表》 \ 《租戶》 \ 《AOP》 \ 《黑科技》 \ 更新日誌
相關文章
相關標籤/搜索