声明:本作者无恶意只是觉得这个功能很不错,平常工作当中经常用到,自己框架也做了相应的支持,本着技术共享目的。
-
一、对象组合设置列更新支持 建议度:高
-
业务场景
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 )
-