給SqlSugar一個優化建議

2023-07-14 18:00:13

宣告:本作者無惡意只是覺得這個功能很不錯,平常工作當中經常用到,自己框架也做了相應的支援,本著技術共用目的。

  • 一、物件組合設定列更新支援 建議度:高

    • 業務場景

      1.更新列表需統一設定 例如:修改人ID、修改人名稱、修改日期等
      2.更新列表需原欄位參與計算,例如:更新次數、金額等
      
    • 優化前後區別

      前:需遍歷設定你要更新的欄位
      後:無需遍歷設定更新欄位,資料量越大效能越高 資料量小差異不大
      
    • SqlSugar 範例程式碼

                  var list = new List<Product>()
                  {
                      new Product()
                      {
                          ProductId = 1,
                          ProductCode = "1001",
                      },
                      new Product()
                      {
                          ProductId = 1,
                          ProductCode = "1002",
                      }
                  };
                  var sql = db.Updateable(list).UpdateColumns(c => new
                  {
                      c.ProductCode
                  }).SetColumns(c => new Product()
                  {
                      ModifyUserId = "666666",
                      ModifyName = "靚仔"
                  }).ToSqlString();
                  Console.WriteLine(sql);
      
    • 目前可以得到友好異常提示

      中文提示 : 根據對像更新 db.Updateabe(物件) 禁止使用 SetColumns和Where ,你可以使用WhereColumns 和  UpdateColumns。 更新分為2種方式 1.根據表示式更新 2.根據實體或者集合更新 , 具體用法請檢視檔案
      English Message :  no support SetColumns and Where
      
    • Fast.Framework 範例程式碼(參考實現)

                      var list = new List<Product>()
                      {
                          new Product()
                          {
                              ProductId = 1,
                              ProductCode = "1001"
                          },
                          new Product()
                          {
                              ProductId = 2,
                              ProductCode = "1002"
                          }
                      };
      
                      var sql = db.Update(list)
                      .Columns(c => c.ProductCode)
                      .SetColumns(c => new Product()
                      {
                          ModifyUserId = "666666",
                          ModifyUserName = "靚仔",
                          ModifyTime = DateTime.Now,
                          UpdateCount = c.UpdateCount + 1
                      }).ToSqlString();
      
                      Console.WriteLine(sql);
      
    • 輸出Sql

      UPDATE `Product` `p1`
      INNER JOIN ( SELECT @ProductId_1 AS `ProductId`,@ProductCode_2 AS `ProductCode`
      UNION ALL
      SELECT @ProductId_3 AS `ProductId`,@ProductCode_4 AS `ProductCode` ) `p1_0` ON `p1`.`ProductId` = `p1_0`.`ProductId`
      SET `p1`.`ProductCode` = `p1_0`.`ProductCode`,`p1`.`ModifyUserId` = '666666',`p1`.`ModifyUserName` = '靚仔',`p1`.`ModifyTime` = @Now_1,`p1`.`UpdateCount` = ( `p1`.`UpdateCount` + 1 )