一、物件組合設定列更新支援 建議度:高
業務場景
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 )
本文來自部落格園,作者:China-Mr-zhong,轉載請註明原文連結:https://www.cnblogs.com/China-Mr-zhong/p/17554653.html