给SqlSugar一个优化建议

发布时间 2023-07-14 17:58:35作者: China-Mr-zhong

声明:本作者无恶意只是觉得这个功能很不错,平常工作当中经常用到,自己框架也做了相应的支持,本着技术共享目的。

  • 一、对象组合设置列更新支持 建议度:高

    • 业务场景

      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 )