有沒有一種方法可以確定在實體框架中是否存在未保存的更改?檢查是否有任何未決更改要保存
回答
這可能會實現(如果改變你的意思是添加,刪除和修改實體):
bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
) > 0;
編輯:
改進代碼:
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
+1通常在正確的軌道上,但使用'Any()',而不是'Count()> 0'。 – 2010-06-29 12:38:30
補充一下 - 今天就閱讀你的博文吧!謝謝;) – Yakimych 2010-06-29 13:05:35
請注意,EF不檢查值是否真的不同(對於'EntityState.Modified')。 e.q.如果你自己替換一個值,EF將返回'1修改對象'。如果值不同,你必須事先檢查。 – 2016-01-05 14:37:15
對於那些你使用EF 4+,這裏是作爲擴展方法的等效解決方案:
public static class DbContextExtensions {
public static Boolean HasPendingChanges(this DbContext context) {
return context.ChangeTracker.Entries()
.Any(e => e.State == EntityState.Added
|| e.State == EntityState.Deleted
|| e.State == EntityState.Modified);
}
}
請注意,您不能將這些值組合爲位掩碼。函數GetObjectStateEntries()
爲您處理邏輯,但LINQ不會產生正確的結果。
從EF 6開始,有context.ChangeTracker.HasChanges()
。
最新的答案。 – Zapnologica 2015-12-23 03:42:21
截至2016年,這是答案,恕我直言。 – ozgur 2016-05-02 10:36:27
現在這是其他人提到的最佳答案。 – Yokomoko 2017-03-07 14:04:31
- 1. Angular Resource - 如何檢查資源實例是否有未保存的更改?
- 2. 實體框架:檢查是否有要從特定實體保存的更改
- 3. 確定TIBTransaction是否有未決更改
- 4. 如何檢查AWS S3同步是否有任何更改?
- 5. 檢查在還原應用程序中是否存在未保存的更改
- 6. 檢查輸入是否未更改
- 7. 檢查領域對象是否有任何更改
- 8. Angular 2 - 檢查是否有任何默認值已更改
- 9. gitpython檢查使用PYTHON的文件是否有任何更改
- 10. 如何檢測窗口是否有「您想要保存更改」對話框?
- 11. 是否有任何解決方法來「保留」緩存部分?
- 12. 檢查IList是否更改?
- 13. 檢查字典中是否存在字未找到任何字
- 14. 檢查是否有任何控件已更改並在表格關閉時保存數據
- 15. 如何檢查密鑰是否在NHibernate中未保存的值
- 16. 如何檢查新行是否已創建但尚未保存
- 17. 如何檢查圖是否需要保存
- 18. 如何檢查工作項目是否已修改或未保存
- 19. 檢查項目是否存在保存
- 20. 如何檢測git倉庫是否有任何更改?
- 21. 檢查是否有任何UserControl打開
- 22. 檢查是否有任何輸入值
- 23. 檢查ServletResponse是否有任何內容
- 24. ,如何檢查ImageField是否已更改?
- 25. 如何檢查EditText是否被更改?
- 26. 如何檢查是否有任何在一個div改變
- 27. 驗證是否有任何更改TabPage
- 28. MySQL的檢查是否有任何行在日期未來
- 29. jQuery:檢查是否有任何單選按鈕未被選中
- 30. 如何檢查nsfilemanager中是否存在任何現有文件?
context.savechanges()不會自動檢查嗎?我想問的原因是我認爲一些人會嘗試做以下事情:'if(db.ChangeTracker.HasChanges()){await db.SaveChangesAsync(); }' – Zapnologica 2015-12-23 03:43:39