我有一個客戶類,其中包括存儲所有針對特定客戶的接觸一類,因此它們與外鍵關係鏈接。回滾實體框架4.0
這裏是我的方案:用戶編輯客戶信息,包括聯繫人,然後決定打「取消」按鈕。聯繫人綁定到網格,因此每次進行編輯/添加/刪除時,都會自動更新緩存數據庫上下文中的聯繫人實體。那麼我怎樣才能回滾用戶對Contact實體所做的所有更改?
我嘗試以下(後尋找答案谷歌):
public static void CustomerRollback(Customer customer)
{
dbContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, customer);
dbContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, customer.Contacts);
}
但沒有奏效。任何其他想法?請注意,我的問題只是回滾Contacts實體。我想首先會導致問題的原因是網格會自動更新緩存的實體。所以當我嘗試取消時,每個聯繫人的EntityState已經更改爲已修改狀態(EntityState.Added,EntityState.Deleted等)。我是否需要循環訪問聯繫人並檢查他們的EntityState屬性並使用它進行操作?
感謝 凱撒
上下文旨在成爲一個工作單元。 「回滾」工作的方式是處理上下文。這聽起來像你是在保持上下文太長。這具有深遠的消極後果。 – 2010-07-12 19:25:55
下面u和devart都建議配置上下文,但這並不意味着我必須重新從數據庫中獲取所有數據?這會妨礙表現。 順便說一句,這不是一個長時間的上下文問題,因爲這個問題在我啓動應用程序的早期就會發生。我是唯一一個測試它的用戶,所以沒有併發問題。 – Caesar 2010-07-13 19:30:48
您正在過早地優化。如果您使用單例上下文,您的長期性能可能已經很差。不要因爲想象中的性能影響而拒絕正確的實踐,而是應該按照打算使用的方式使用上下文,然後通過分析和點修復來修復任何性能問題。 – 2010-07-14 14:55:27