Products p = DbSession.Default.From().ToFirst();
p.Attach(); // 開啟修改追蹤
p.ProductName = "apple";
p.UnitPrice = 10.5m;
// p.GetModifyFields() 可檢視異動欄位
// p.ClearModifyFields() 可清除追蹤
int rows = DbSession.Default.Update(p);
// 僅更新實際異動的欄位
Attach() 後的屬性設定會被記錄,Update 只產生異動欄位的 SET 子句。
DbSession.Default.Update(
Products._.ProductName, "apple",
Products._.ProductID == 1);
// SQL: UPDATE [Products] SET [ProductName]=@p0 WHERE [ProductID]=@p1
var dic = new Dictionary {
{ Products._.ProductName, "apple" },
{ Products._.ReorderLevel, 20 }
};
DbSession.Default.Update(dic, Products._.ProductID == 1);
// SQL: UPDATE [Products] SET [ProductName]=@p0, [ReorderLevel]=@p1 WHERE [ProductID]=@p2
int 受影響列數(0 失敗、>0 成功)。DbTrans 參數加入外部交易。| 場景 | 推薦模式 | 理由 |
|---|---|---|
| 編輯頁面 10+ 欄位 | 實體追蹤 | 自動偵測異動、避免手工列舉 |
| 單一欄位狀態變更 | 單欄位直更新 | 一行搞定、語意最清晰 |
| 動態表單/選填欄位 | 字典批次 | 靈活組合、只更新有值欄位 |
| 欄位運算更新 (a=b+c) | 字典 + Field 運算式 | 見第 27 篇欄位組合更新 |
Products p = new Products();
EntityUtils.UpdateModel(p, "txt_"); // 讀取 txt_ProductName 等控制項
DbSession.Default.Insert(p);
配合命名慣例(前綴 + 屬性名),一行完成頁面→實體 資料傳輸。
Update 多載設計貼近實務需求,消除手工拼接 SET 子句的錯誤與繁瑣,是 Hxj.Data 寫入端的核心 API。