2011-04-27 58 views
0

我有一個基於codefirst EF-4.1的程序。用戶獲取上下文並可以修改某些屬性。當用戶完成後,我做一個快速DbContext的ChangeTracker問題

ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged); 

,以確定是否需要或不SaveChanges()。如果我執行'SaveChanges()'調用,則所做的更改將持久保存到數據庫中。

這適用於某些屬性,不適用於其他屬性。具體來說,它似乎適用於簡單類型(float s)和集合層次結構(ObservableCollection s)。

我做錯了什麼?

回答

5

是的,這是一個問題。有些關係不通過DbChangeTracker跟蹤。 Independent association and Foreign key association之間有區別。更改關係中的情況下跟蹤:

  • 一比一的關係,其始終處於EFv4外鍵關聯+
  • 一到多與外鍵關聯關係 - 你應該建立外鍵屬性在以下情況下是不被跟蹤

更改關係:

  • 一個一對多的關係,與獨立協會
  • 多對多關係永遠是獨立協會

沒有跟蹤獨立關聯是不正確的命名。跟蹤這些變化,但DbChangeTrackerdoes not expose access to these changes!您必須將DbContext轉換爲ObjectContext並使用ObjectStateManager才能訪問代表獨立關聯的ObjectStateEntries

在這種情況下,最簡單的事情就是總是打電話SaveChanges。如果不需要保存數據,它將不會執行任何DB命令。

+0

經過一些測試後,我選擇了SaveChanges()。正如你所提到的,如果沒有改變持續下去,這個通話很便宜。 – Gleno 2011-04-27 21:42:00