<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          5個EF core性能優(yōu)化技巧,讓你程序健步如飛

          共 2031字,需瀏覽 5分鐘

           ·

          2022-08-09 00:24

          1.使用 EF.Functions.xxx 進行查詢

          (1).使用 EF.Functions.Like進行模糊查詢要比 StartsWith、Contains 和 EndsWith 方法生成的SQL語句性能更優(yōu)。

          A. Contains語句,生成的sql為:

            var data3 = dbContext.T_UserInfor.Where(u => u.userName.Contains("p")).ToList();

          用的是charindex

          B. EF.Functions.Like語句生成的sql為:(Like搭配SQL查詢的通配符使用)

            var data1 = dbContext.T_UserInfor.Where(u => EF.Functions.Like(u.userName, "%p%")).ToList();
            //或者
            var data2 = (from p in dbContext.T_UserInfor
                         where EF.Functions.Like(p.userName, "%p%")
                         select p).ToList();

          注:需要引用Microsoft.EntityFrameworkCore命名空間 用的是Like

          PS:在傳統(tǒng)的.Net中,還有種用法 SqlMethods

          (2).還有EF.Functions.DateDiffDay (DateDiffHour、DateDiffMonth),求天、小時、月之間的數(shù)量

          PS:在EF Core中StartsWith、Contains和EndsWith模糊查詢實際分別被解析成為Left、CharIndex和Right,而不是Like,而EF.Functions.Like會解析成Like語句。

          2、添加Z.EntityFramework.Plus.EFCore依賴使用一些特殊的語法

          這個是免費的,但 Z.EntityFramework.Plus的一些批量數(shù)據(jù)操作的包是收費的

          (1) EFCore刪除必須先查詢再刪除,優(yōu)化后可直接刪除:context.User.Where(t => t.Id == 100).Delete();

          (2)優(yōu)化更新語句:context.User.Where(t => t.Id == 4).Update(t =>new User() { NickName = "2224114" ,Phone = "1234"} );

          3、正確使用Find(id=10)來代替FirstOrDefault(t=>t.id=10)

          Find會優(yōu)先查詢緩存,當前面已經(jīng)查詢過這條數(shù)據(jù)的時候使用,而FirstOrDefault每次都會查詢數(shù)據(jù)庫;當id=10的數(shù)據(jù)被修改之后,find查出的數(shù)據(jù)是新數(shù)據(jù)。

          4、禁用實體追蹤

          當我們從數(shù)據(jù)庫中查詢出數(shù)據(jù)時,上下文就會創(chuàng)建實體快照,從而追蹤實體。在調(diào)用 SaveChanges 時,實體有任何更改都會保存到數(shù)據(jù)庫中。

          但是當我們只需要查詢出實體而不需要修改時(只讀),實體追蹤就沒有任何用途了。這時我們就可以調(diào)用 AsNoTracking 獲取非追蹤的數(shù)據(jù),這樣可以提高查詢性能。具體代碼如下:

          var users = db.Users.AsNoTracking().ToList();
          注:如果是多表查詢可以在查詢前
          db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
          這樣就把所有表查詢設置成了非追蹤狀態(tài)

          5、使用 .Any(),盡量不使用

          判斷查詢出的列表是否有值時,使用 .Any(),盡量不使用 .Count(); .FirstOrDefault() 出處:

          https://www.cnblogs.com/qingheshiguang/p/13559561.html

          版權(quán)申明:本文來源于網(wǎng)友收集或網(wǎng)友提供,僅供學習交流之用,如果有侵權(quán),請轉(zhuǎn)告版主或者留言,本公眾號立即刪除。

          瀏覽 106
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜美女福利视频 | 夜夜拍日日夜夜拍 | 亚洲色成人无码777777在线 | 中国婬乱a一级毛片多女 | 亚州a视频 |