<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【轉(zhuǎn)載】給 EF Core 查詢?cè)黾?With NoLock

      http://www.rzrgm.cn/weihanli/p/12623934.html
      給 EF Core 查詢?cè)黾?With NoLock

      Intro#

      EF Core 在 3.x 版本中增加了 Interceptor,使得我們可以在發(fā)生低級(jí)別數(shù)據(jù)庫(kù)操作時(shí)作為 EF Core 正常運(yùn)行的一部分自動(dòng)調(diào)用它們。 例如,打開(kāi)連接、提交事務(wù)或執(zhí)行命令時(shí)。

      所以我們可以自定義一個(gè) Interceptor 來(lái)記錄執(zhí)行的 sql 語(yǔ)句,也可以通過(guò) Interceptor 來(lái)實(shí)現(xiàn) sql 語(yǔ)句的執(zhí)行前的修改或者更準(zhǔn)確的記錄 DbCommand 執(zhí)行的耗時(shí)。

      這里我們可以借助 Interceptor 實(shí)現(xiàn)對(duì)于查詢語(yǔ)句的修改,自動(dòng)給查詢語(yǔ)句加 (WITH NOLOCK),WITH NOLOCK 等效于 READ UNCOMMITED(讀未提交)的事務(wù)級(jí)別,這樣可能會(huì)造成一定的臟讀,但是從效率上而言,是比較高效的,不會(huì)因?yàn)閯e的事務(wù)長(zhǎng)時(shí)間未提交導(dǎo)致查詢阻塞,所以對(duì)于大數(shù)據(jù)多事務(wù)的場(chǎng)景下,查詢 SQL 加 NOLOCK 還是比較有意義的

      NoLockInterceptor#

      繼承 DbCommandInterceptor,重寫(xiě)查詢 sql 執(zhí)行之前的操作,在執(zhí)行查詢 sql 之前增加 WITH(NOLOCK),實(shí)現(xiàn)代碼如下:

      Copy
      public class QueryWithNoLockDbCommandInterceptor : DbCommandInterceptor
      {
          private static readonly Regex TableAliasRegex =
              new Regex(@"(?<tableAlias>AS \[[a-zA-Z]\w*\](?! WITH \(NOLOCK\)))",
                  RegexOptions.Multiline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
      
          public override InterceptionResult<object> ScalarExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<object> result)
          {
              command.CommandText = TableAliasRegex.Replace(
                  command.CommandText,
                  "${tableAlias} WITH (NOLOCK)"
                  );
              return base.ScalarExecuting(command, eventData, result);
          }
      
          public override Task<InterceptionResult<object>> ScalarExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult<object> result,
              CancellationToken cancellationToken = new CancellationToken())
          {
              command.CommandText = TableAliasRegex.Replace(
                  command.CommandText,
                  "${tableAlias} WITH (NOLOCK)"
                  );
              return base.ScalarExecutingAsync(command, eventData, result, cancellationToken);
          }
      
          public override InterceptionResult<DbDataReader> ReaderExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result)
          {
              command.CommandText = TableAliasRegex.Replace(
                  command.CommandText,
                  "${tableAlias} WITH (NOLOCK)"
                  );
              return result;
          }
      
          public override Task<InterceptionResult<DbDataReader>> ReaderExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result,
              CancellationToken cancellationToken = new CancellationToken())
          {
              command.CommandText = TableAliasRegex.Replace(
                  command.CommandText,
                  "${tableAlias} WITH (NOLOCK)"
                  );
              return base.ReaderExecutingAsync(command, eventData, result, cancellationToken);
          }
      }
      

      Interceptor 的使用#

      在注冊(cè) DbContext 服務(wù)的時(shí)候,可以配置 Interceptor,配置如下:

      Copy
      var services = new ServiceCollection();
      services.AddDbContext<TestDbContext>(options =>
      {
          options
              .UseLoggerFactory(loggerFactory)
              .UseSqlServer(DbConnectionString)
              .AddInterceptors(new QueryWithNoLockDbCommandInterceptor())
              ;
      });
      

      使用效果#

      通過(guò) loggerFactory 記錄的日志查看查詢執(zhí)行的 sql 語(yǔ)句

      可以看到查詢語(yǔ)句自動(dòng)加上了 WITH (NOLOCK)

      Reference#

      posted @ 2020-04-03 12:37  事理  閱讀(1253)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 91福利国产成人精品导航| 日本极品少妇videossexhd| 日本中文字幕有码在线视频| 日韩免费无码人妻波多野| 国产无遮挡裸体免费久久| 国产福利在线观看免费第一福利| 777米奇影视第四色| 亚洲成av人片天堂网无码| 性欧洲大肥性欧洲大肥女| 久久综合国产色美利坚| 精品国产一区二区在线视| 嫖妓丰满肥熟妇在线精品| 成人毛片100免费观看| 精品国产中文字幕在线| 欧洲性开放老太大| 一区二区三区四区五区自拍| 九九re线精品视频在线观看视频 | 久久99久国产麻精品66| 色爱综合另类图片av| 欧美精品在线观看视频| 日本夜爽爽一区二区三区| 无码精品人妻一区二区三区湄公河| 国产视频一区二区三区麻豆| 国产普通话刺激视频在线播放| 亚洲一本二区偷拍精品| 国产精品爆乳奶水无码视频免费| 久久婷婷综合色丁香五月| 长腿校花无力呻吟娇喘的视频| 国产欧美VA天堂在线观看视频| 日韩幕无线码一区中文| 色老99久久精品偷偷鲁| 精品无码国产一区二区三区AV| 国产精一区二区黑人巨大| 18禁午夜宅男成年网站| 日韩精品无码一区二区视频| 国产高清一区二区三区视频| 欧美牲交a欧美在线| 国产绿帽在线视频看| 久久se精品一区二区三区| 中文字幕一区二区三区精华液| 国产午夜精品一区理论片|