<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-08 19:32

          1.使用 EF.Functions.xxx 進(jìn)行查詢(xún)

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

          A. Contains語(yǔ)句,生成的sql為:

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

          用的是charindex

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

            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í)、月之間的數(shù)量

          PS:在EF Core中StartsWith、Contains和EndsWith模糊查詢(xún)實(shí)際分別被解析成為L(zhǎng)eft、CharIndex和Right,而不是Like,而EF.Functions.Like會(huì)解析成Like語(yǔ)句。

          2、添加Z.EntityFramework.Plus.EFCore依賴(lài)使用一些特殊的語(yǔ)法

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

          (1) EFCore刪除必須先查詢(xún)?cè)賱h除,優(yōu)化后可直接刪除:context.User.Where(t => t.Id == 100).Delete();

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

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

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

          4、禁用實(shí)體追蹤

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

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

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

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

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

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

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

          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  亚洲综合区 | 中文字幕 第二页 | 小黄片下载免费视频 | 逼特逼视频网址大全免费观看 | 精品欧美视频 |