<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      FreeSql AOP 已有的功能介紹,未來為會根據(jù)用戶需求不斷增強。

      審計 CRUD

      馬云說過,996是修福報。對于多數(shù)程序員來說,加班是好事。。。起碼不是閑人,不會下崗。

      當如果因為某個 sql 騷操作耗時很高,沒有一個相關(guān)的審計功能,排查起來可以說無從下手,福報與你緊緊相隨(哈哈)。

      FreeSql 支持簡單的類似功能:
      fsql.Aop.CurdAfter = (s, e) => { if (e.ElapsedMilliseconds > 200) { //記錄日志
      //發(fā)送短信給負責(zé)人 } };
      是的,只需要一個事件,就可以對全局起到作用。

      除了 CurdAfter,還有一個 CurdBefore (在執(zhí)行 sql 之前觸發(fā))。

      審計屬性值

      實現(xiàn)插入/更新時統(tǒng)一處理某些值,比如某屬性的雪花算法值、創(chuàng)建時間值、甚至是業(yè)務(wù)值。
      fsql.Aop.AuditValue += (s, e) => { if (e.Column.CsType == typeof(long) &&
      e.Property.GetCustomAttribute<SnowflakeAttribute>(false) != null &&
      e.Value?.ToString() == 0) e.Value = new Snowflake().GetId(); }; class Order {
      [Snowflake] public long Id { get; set; } //... }
      當屬性的類型是 long,并且標記了 [Snowflake],并且當前值是 0,那么在插入/更新時它的值將設(shè)置為雪花id值。

      說明:SnowflakeAttribute 是使用者您來定義,new Snowflake().GetId() 也是由使用者您來實現(xiàn)

      如果命名規(guī)范,可以在 aop 里判斷,if (e.Property.Name == "createtime") e.Value = DateTime.Now;

      審計遷移腳本

      FreeSql 自帶遷移功能,那么遷移的 SQL 語句長啥樣,你可能會好奇。

      *
      比如創(chuàng)建表時;

      *
      比如添加字段時;

      *
      比如修改表名、修改字段名時;

      *
      又比如字段類型更改之后時;

      這些操作在 FreeSql.CodeFirst 實現(xiàn)下基本不需要理會,而且我們只推薦在開發(fā)環(huán)境使用自動遷移的功能,正式環(huán)境可使用其他工具替代此操作。

      但我們?nèi)匀豢赡苄枰獙椖孔鐾暾娜罩居涗洝?br>
      fsql.Aop.SyncStructureBefore、fsql.Aop.SyncStructureAfter 這兩個事件將排上用場。

      自定義實體特性

      比如項目內(nèi)已經(jīng)使用了其它 orm,如 efcore,這樣意味著實體中可能存在 [Key],但它與 FreeSql [Column(IsPrimary =
      true] 不同。

      Q: FreeSql 實體特性為啥這么別扭?

      A: 為了考慮一致性用法,全部封裝在 ColumnAttribute 下,這樣用戶使用起來,不用到處 using 或者 回憶特性應(yīng)該用哪個名字,如自增
      [Column(IsIdentity = true)] 即可。

      FreeSql 提供 AOP 自定義特性功能,實現(xiàn)與多個 orm 共同擁有一套實體特性,可避免重復(fù)定義特性。
      fsql.Aop.ConfigEntity = (s, e) => { var attr =
      e.EntityType.GetCustomAttributes(
      typeof(System.ComponentModel.DataAnnotations.Schema.TableAttribute),
      false).FirstOrDefault() as
      System.ComponentModel.DataAnnotations.Schema.TableAttribute; if (attr != null)
      e.ModifyResult.Name = attr.Name; //表名 }; fsql.Aop.ConfigEntityProperty = (s, e)
      => { if (e.Property.GetCustomAttributes(
      typeof(System.ComponentModel.DataAnnotations.KeyAttribute), false).Any())
      e.ModifyResult.IsPrimary = true; //主鍵 };
      就這樣,F(xiàn)reeSql 的實體特性就可以和 EFCore 那樣設(shè)定了。其他自增、樂觀鎖等,依葫蘆畫瓢便是。

      自定義表達式

      FreeSql 內(nèi)部表達式支持非常豐富,對各大數(shù)據(jù)庫的兼容度也做得很好。

      有關(guān)表達式支持到的程度,可點擊查看詳細wiki:
      https://github.com/2881099/FreeSql/wiki/%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%87%BD%E6%95%B0

      <https://github.com/2881099/FreeSql/wiki/%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%87%BD%E6%95%B0>

      即便如此豐富,也仍然無法滿足用戶需求,F(xiàn)reeSql 對外開放了自定義表達式解析接口:
      fsql.Aop.ParseExpression = (s, e) => { if (e.Expression.NodeType == Call &&
      e.Expression.Name == "get_Item") e.Result = "1111"; };
      這個解析有點復(fù)雜,當 e.Expression 很復(fù)雜的時候,我們還提供了 e.FreeParse 方法,使用它相當于調(diào)用 FreeSql
      內(nèi)置表達式解析引擎,輔助您進行解析。

      Aop.Where

      FreeSql 提供的 ISelect、IDelete、IUpdate 三大對象,都可以使用 .Where(lambda) 操作,也可以是
      .Where(sql) 操作。

      Aop.Where 的定位是可攔截 Where 條件。
      fsql.Aop.Where = (s, e) => { if (e.Parameter[0]?.ToString() == "1") e.IsCancel
      = true; };
      Aop.ToList

      監(jiān)控 ToList 返回的的數(shù)據(jù),用于攔截重新裝飾。

      所有通過 FreeSql.Select 查詢返回的時候,都可以在這個事件上進行重新裝飾。

      系列文章導(dǎo)航

      *
      (一)入門 <https://www.cnblogs.com/FreeSql/p/11531300.html>

      *
      (二)自動遷移實體 <https://www.cnblogs.com/FreeSql/p/11531301.html>

      *
      (三)實體特性 <https://www.cnblogs.com/FreeSql/p/11531302.html>

      *
      (四)實體特性 Fluent Api <https://www.cnblogs.com/FreeSql/p/11531304.html>

      *
      (五)插入數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531306.html>

      *
      (六)批量插入數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531309.html>

      *
      (七)插入數(shù)據(jù)時忽略列 <https://www.cnblogs.com/FreeSql/p/11531316.html>

      *
      (八)插入數(shù)據(jù)時指定列 <https://www.cnblogs.com/FreeSql/p/11531318.html>

      *
      (九)刪除數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531320.html>

      *
      (十)更新數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531321.html>

      *
      (十一)更新數(shù)據(jù) Where <https://www.cnblogs.com/FreeSql/p/11531324.html>

      *
      (十二)更新數(shù)據(jù)時指定列 <https://www.cnblogs.com/FreeSql/p/11531327.html>

      *
      (十三)更新數(shù)據(jù)時忽略列 <https://www.cnblogs.com/FreeSql/p/11531334.html>

      *
      (十四)批量更新數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531335.html>

      *
      (十五)查詢數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531339.html>

      *
      (十六)分頁查詢 <https://www.cnblogs.com/FreeSql/p/11531341.html>

      *
      (十七)聯(lián)表查詢 <https://www.cnblogs.com/FreeSql/p/11531346.html>

      *
      (十八)導(dǎo)航屬性 <https://www.cnblogs.com/FreeSql/p/11531352.html>

      *
      (十九)多表查詢 <https://www.cnblogs.com/FreeSql/p/11531362.html>

      *
      (二十)多表查詢 WhereCascade <https://www.cnblogs.com/FreeSql/p/11531372.html>

      *
      (二十一)查詢返回數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531376.html>

      *
      (二十二)Dto 映射查詢 <https://www.cnblogs.com/FreeSql/p/11531381.html>

      *
      (二十三)分組、聚合 <https://www.cnblogs.com/FreeSql/p/11531384.html>

      *
      (二十四)Linq To Sql 語法使用介紹 <https://www.cnblogs.com/FreeSql/p/11531392.html>

      *
      (二十五)延時加載 <https://www.cnblogs.com/FreeSql/p/11531395.html>

      *
      (二十六)貪婪加載 Include、IncludeMany、Dto、ToList
      <https://www.cnblogs.com/FreeSql/p/11531404.html>

      *
      (二十七)將已寫好的 SQL 語句,與實體類映射進行二次查詢
      <https://www.cnblogs.com/FreeSql/p/11531416.html>

      *
      (二十八)事務(wù) <https://www.cnblogs.com/FreeSql/p/11531423.html>

      *
      (二十九)Lambda 表達式 <https://www.cnblogs.com/FreeSql/p/11531425.html>

      *
      (三十)讀寫分離 <https://www.cnblogs.com/FreeSql/p/11531430.html>

      *
      (三十一)分區(qū)分表 <https://www.cnblogs.com/FreeSql/p/11531435.html>

      *
      (三十二)Aop

      *
      (三十三)CodeFirst 類型映射 <https://www.cnblogs.com/FreeSql/p/11531543.html>

      *
      (三十四)CodeFirst 遷移說明 <https://www.cnblogs.com/FreeSql/p/11531550.html>

      *
      (三十五)CodeFirst 自定義特性 <https://www.cnblogs.com/FreeSql/p/11531576.html>

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          好男人WWW一区二区三区 | 激情五月乱伦网 | 三级无码观看 | 男女视频免费看 | 国产三区视频在线观看 | 无码小说 | 中文字幕-熊猫成人网 | 天天模天天日 | 日韩一区二区中文字幕 | 考逼大网站 |