2013-01-17 123 views
0

信息在上N-Tiered Applications閱讀文章時,我遇到了關於併發性令牌信息和變更跟蹤信息:更改跟蹤使用的DbContext

的另一個重要概念理解的是,雖然 默認生成的實體支持序列化,它們的 變更跟蹤信息存儲在ObjectStateManager(ObjectContext的 部分)中,該對象不支持序列化。

我的問題有三個方面:

  1. 是否有使用DbContext當一回事?
  2. 如果與數據庫的唯一交互是在using語句中的Repository類中,那麼在程序離開using語句時是否關閉數據庫連接,以避免更改跟蹤的任何選項?
  3. 這可以作爲/併發令牌使用嗎?

回答

1
  1. 是的。 DbContext只是圍繞着ObjectContext進行包裝,它通過ChangeTracker屬性(返回DbChangeTracker)和特定實體通過調用Entry方法(返回DbEntityEntry<T>)公開更改跟蹤信息。
  2. 是的。關閉上下文將刪除所有更改跟蹤信息。
  3. 併發令牌和更改跟蹤是兩個完全不同的概念。更改跟蹤告訴上下文當您撥打SaveChanges時,必須在數據庫上執行哪些操作。它會跟蹤您在實體中所做的更改,因爲您已將它們加載到當前上下文實例中。併發標記解決數據庫中的樂觀併發性=>它驗證另一個進程/線程/用戶/上下文實例沒有更改您的上下文在SaveChanges期間要修改的記錄。