FreeSql是一個功能強大的 .NET ORM 功能庫,支持 .NetFramework 4.0+、.NetCore 2.1+、Xamarin 等支持 NetStandard 全部運行平臺。html
特性git
開源地址: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》 \ | 《黑科技》 \ | 更新日誌 |