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

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

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

      C# entityframework生成sql語句添加with(nolock)最優(yōu)解決方案

      /// <summary>
          /// ef實現(xiàn)withnolock,給表名后面添加with(nolock),不適用.net core
          /// </summary>
          public class WithNoLockInterceptor : DbCommandInterceptor
          {
              private static readonly Regex TableAliasRegex = new Regex(@"(?<tableAlias>\[dbo\].\[\w+\] AS \[Extent\d+\](?! WITH\(NOLOCK\)))", RegexOptions.Multiline | RegexOptions.IgnoreCase);
      
              /// <summary>
              /// https://www.bbsmax.com/A/8Bz8V6V65x/
              /// 建議不要為標(biāo)記為 ThreadStaticAttribute 的字段指定初始值,因為這樣的初始化只會發(fā)生一次,因此在類構(gòu)造函數(shù)執(zhí)行時只會影響一個線程。
              /// 在不指定初始值的情況下,如果它是值類型,可依賴初始化為其默認(rèn)值的字段,如果它是引用類型,則可依賴初始化為空引用的字段。
              /// </summary>
              [ThreadStatic]
              public static bool Uselocking;
      
              [ThreadStatic]
              public static string CommandText;
      
              public override void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
              {
                  if (!Uselocking)
                  {
                      command.CommandText = TableAliasRegex.Replace(command.CommandText, "${tableAlias} WITH(NOLOCK) ");
                      CommandText = command.CommandText;
                  }
                  //System.IO.File.AppendAllText("D:\\1.txt", "Uselocking=" + Uselocking.ToString() + "~" + CommandText + "\r\n\r\n");
              }
      
              public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
              {
                  if (!Uselocking)
                  {
                      command.CommandText = TableAliasRegex.Replace(command.CommandText, "${tableAlias} WITH(NOLOCK) ");
                      CommandText = command.CommandText;
                  }
                  //System.IO.File.AppendAllText("D:\\1.txt", "Uselocking=" + Uselocking.ToString() + "~" + CommandText + "\r\n\r\n");
              }

      使用:在Global.cs的Application_Start()里面添加如下語句,生成的sql會自動加上with(nolock)

      //ef命令攔截器
      DbInterception.Add(new WithNoLockInterceptor());

      如果執(zhí)行的sql語句需要鎖表,增加如下擴(kuò)展即可

      public static class WithNoLockExtensions
          {
              /// <summary>
              /// 部分查詢需要使用鎖查詢的,可以調(diào)用此擴(kuò)展(默認(rèn)全局查詢使用with(nolock))
              /// 參考:https://github.com/aspnetboilerplate/aspnetboilerplate/issues/1637/
              /// 示例:
              /// 1、query.OrderByCustom(filters.orderFields).Select({...}).UseLocking(querable => querable.PagingAsync(filters.page, filters.rows));
              /// 2、repository.EntitiesAsNoTracking.Select(...).UseLocking(item=>item.FirstOrDefaultAsync());
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <typeparam name="TResult"></typeparam>
              /// <param name="query"></param>
              /// <param name="queryAction"></param>
              /// <returns></returns>
              public static TResult UseLocking<T, TResult>(this IQueryable<T> query, Func<IQueryable<T>, TResult> queryAction)
              {
                  WithNoLockInterceptor.Uselocking = true;
                  //System.IO.File.AppendAllText("D:\\2.txt", $"更改了Uselocking{WithNoLockInterceptor.Uselocking}狀態(tài)\r\n\r\n");
      
                  TResult queryableResult = default(TResult);
                  try
                  {
                      queryableResult = queryAction(query);
                  }
                  finally
                  {
                      WithNoLockInterceptor.Uselocking = false;
                  }
      
                  //System.IO.File.AppendAllText("D:\\2.txt", $"更改了Uselocking2{WithNoLockInterceptor.Uselocking}狀態(tài)\r\n\r\n");
                  return queryableResult;
              }

       

       

      1、修復(fù)了網(wǎng)上提供的正則表達(dá)式特殊情況下報錯問題

       

      posted @ 2019-09-03 12:54  事理  閱讀(2398)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 亚洲无人区码一二三四区| 中文字幕成熟丰满人妻| 国产精品成人中文字幕| 国产精品一区中文字幕| 国产av无码专区亚洲av软件| 最近免费中文字幕大全| 国产午夜精品福利91| 亚洲精品岛国片在线观看| 日夜啪啪一区二区三区| 久久精品国产精品亚洲蜜月| 平遥县| 亚洲综合色婷婷中文字幕| 玩弄丰满少妇人妻视频| 香蕉久久久久久久av网站| 亚洲日韩VA无码中文字幕| 国产国拍亚洲精品永久软件| 久久精品国产99亚洲精品| 欧美牲交a欧美牲交aⅴ图片| 精品国产一区二区三区av性色| 亚洲18禁一区二区三区| 久久亚洲精品天天综合网| 99999久久久久久亚洲| 男人又大又硬又粗视频| 午夜福利国产区在线观看| 福利视频在线一区二区| 欧美浓毛大泬视频| 黄又色又污又爽又高潮| 一区天堂中文最新版在线| 成人午夜视频在线| 成全高清在线播放电视剧| 韩国美女福利视频在线观看 | 九九热免费在线播放视频| 男女激情一区二区三区| 亚洲精品www久久久久久| 国产专区一va亚洲v天堂| 国产欧洲欧洲久美女久久| 天美传媒mv免费观看完整| 日本污视频在线观看| 亚洲中文字幕一二区日韩| 欧美性xxxxx极品少妇| 亚洲精品一区二区三区蜜|