-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Labels
Description
問題描述
使用者在多個瀏覽器 Tab 中開啟同一筆記錄進行編輯時,後儲存者會靜默覆蓋先儲存者的修改,沒有任何衝突警告。這在多人協作環境(如業務多人編輯同一客戶資料)下會導致資料遺失,且無任何稽核軌跡。
業界對比
EF Core 內建 [ConcurrencyCheck] / [Timestamp] + DbUpdateConcurrencyException 機制。Django 用 version field 偵測衝突並提示使用者。Google Docs 用 OT 算法實時同步,其他企業系統至少要做到「最後寫入者警告」。
建議修正方向
作為 opt-in 功能,不強制所有模型啟用:
-
模型層:在 Model 上添加
[Timestamp]屬性(EF CoreRowVersion),EF Core 自動進行樂觀鎖[Timestamp] public byte[] RowVersion { get; set; }
-
VM 層:
BaseCRUDVM<T>.DoEdit()捕獲DbUpdateConcurrencyException,回傳 409 Conflict + 衝突資訊 -
前端:
framework_layui.js的 form submit handler 偵測 409 回應,顯示「此記錄已被他人修改,請重新載入後再編輯」dialog,提供「重新載入」和「強制覆蓋」兩個選項 -
文件:在 WTM Developer Manual 說明如何在 Model 啟用此功能
驗收標準
- 模型加入
[Timestamp]後,並行編輯觸發 409 回應 - 前端顯示衝突提示 dialog(非靜默覆蓋)
- 未啟用的模型行為完全不變(向後相容)
- MSTest 覆蓋並行更新衝突情境
- Developer Manual 新增 Optimistic Concurrency 章節
Priority: P2 — 需改動 VM 基底層,成本較高,但對多人協作場景是關鍵架構改善
Labels: enhancement, core
Reactions are currently unavailable