2011-03-16 105 views
1

讓我們假設情況如下:我的應用程序中有一個對象上下文,我從數據庫下載了15k條記錄(如15k發票)。用戶選擇一個並對其進行一些更改。我調用SaveChanges()並因爲某種原因失敗(不管什麼原因)。實體框架 - 如何在保存數據時出現故障

現在使用的上下文無法執行任何保存,因爲它無法保存這些更改。我應該怎麼做才能使它工作?

另一種情況是我使用單獨的上下文進行更改。如果保存失敗,然後沒有任何反應 - 我放棄了上下文,就是這樣。出現的問題是:如何將更改合併回主環境? (沒有再次下載15K記錄)

回答

3

下載15K記錄的想法聞起來很不好,但讓我們假設你必須這樣做。您必須執行此操作的場景應該如下所示:

  1. 爲數據檢索創建第一個上下文。
  2. 執行查詢以獲取您的15k記錄。執行查詢爲NoTrackingMergeOptionObjectQuery)!它會提高性能,因爲這些記錄不會再次在上下文中使用。
  3. 關閉第一個上下文
  4. 用戶挑選和發票=創建發票的深克隆並將其連接到一個新的上下文(在WPF或WinForm應用程序的情況下)
  5. 用戶保存的變化和異常被觸發。如果你想以某種方式處理異常,你仍然只有單一發票的背景。您可以處理上下文並返回到原始的一組未受影響的記錄。
  6. 如果實體已保存,則應將更改合併回列表,因爲15k記錄中的實體不會自動更新。
+0

非常感謝。 – kubal5003 2011-03-16 20:21:53