2014-03-29 64 views
0

我正在使用CodeFirstEF6具有單個狀態映射。有沒有一種方法可以防止EF6恢復實體後保存的屬性?

我有一個奇怪的場景,如下:

  1. ,直到實體創建一個新的(狀態「加」)。
  2. 給新的分配結束值,例如'99.01m'
  3. 將其保存到數據庫(直到成功保存)。
  4. 創建一個新的訂單對象
  5. 創建訂單項對象/ s的
  6. 更新,直到收盤值,以反映成功的訂單,即「101.01米」。
  7. 將訂單對象保存到數據庫(狀態爲'已添加'並已成功保存)。
  8. 保存後,檢查結束值。
  9. 觀察,直到收盤價,預期101.01實際上是99.01米

如果我明確標記,直到:

Cache.TodaysCashDraw.ObjectState = ObjectState.Unchanged; 

值恢復,無論應用對象的狀態或不。

Cache.TodaysCashDraw.ObjectState = ObjectState.Modified; 

但是如果我把它標記爲修改,隨後99.01米被提交到數據庫。

因此,基本上無論我的對象上出現的任何變化都得到恢復,現在這沒問題,但我想解釋一下爲什麼?理想情況下,我希望我的直到對象上的更改能夠保持並不會像上面顯示的那樣恢復。由於在工作日期間費用將會變化很多次,因此我只想在必要時對費用進行更改。訂單和項目應該立即保存,但內存中的Till對象只需要反映已經處理的訂單。這是我目前的想法和方法,在EF4和DB First中運行良好。

有沒有人知道這裏發生了什麼,以及解決這個問題的理想方法是什麼?

一個蹩腳的備份計劃是直接提交更改。

回答

0

一種方法是在斷開連接的情況下是分離問題的實體:

  // detach the till to prevent it from being tracked. 
      Cache.TodaysCashDraw.ObjectState = ObjectState.Detached; 

然後,當你需要保存其狀態,只需重新連接它:

  _ctx.Context.Set<CashDrawsMony>().Attach(_till); 

這完全解決了我的問題。

在更爲重要的筆記上,我實際上正在查看Attach方法,想知道它是幹什麼用的? =)

相關問題