在 Entity Framework Core 資料庫欄位自動加解密示範 這篇文章中有提到資料沒有變更時並不會寫入到資料庫中。
執行 SaveChanges 方法時因為 DbContext 沒有追蹤到變更,所以就直接忽略。不過有時候我們會希望就算看起來資料沒有變動也要寫入到資料庫中,例如利用 Entity Framework Core 更新時間、觸發 Trigger 等,那該怎麼讓 DbContext 追蹤到變更呢?
其實非常簡單,只要使用 Update 就可以強制將該實體標記為已修改(Modified):
延伸閱讀: Entity Framework Core 7 自動紀錄資料表的 建立時間和修改時間
參考資料:
Microsoft.Learn - DbContext.Update Method
Microsoft.Learn - EntityState Enum
執行 SaveChanges 方法時因為 DbContext 沒有追蹤到變更,所以就直接忽略。不過有時候我們會希望就算看起來資料沒有變動也要寫入到資料庫中,例如利用 Entity Framework Core 更新時間、觸發 Trigger 等,那該怎麼讓 DbContext 追蹤到變更呢?
其實非常簡單,只要使用 Update 就可以強制將該實體標記為已修改(Modified):
var entity = _context.Users.First(x => x.Id == id);
_context.Update(entity);
_context.SaveChanges();
延伸閱讀: Entity Framework Core 7 自動紀錄資料表的 建立時間和修改時間
參考資料:
Microsoft.Learn - DbContext.Update Method
Microsoft.Learn - EntityState Enum
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com