我正在開發使用實體框架(.NET 3.5)的WPF應用程序。它在整個地方訪問實體。我擔心貫穿整個應用程序的一致性。我是否應該在不同的視圖中實例化單獨的上下文,還是應該(並且是一個很好的方法)實例化一個可以在全局範圍內訪問的上下文?例如,我的實體模型包含三個部分:貨件(包含子包和其他子內容),公司/聯繫人(包含子地址和電話)以及磁盤規格。 Shipments和EditShipment視圖訪問DiskSpecs,而OptionsView管理DiskSpecs(創建,編輯,刪除)。如果我編輯一個DiskSpec,我必須在ShipmentsView中有一些東西來檢索最新的規格,如果我有單獨的上下文嗎?WPF應用程序中的全局實體框架上下文
如果可以安全地從應用程序的其餘部分獲取一個總體上下文,那麼我想這就是要走的路。如果是這樣,該實例將放在哪裏?我使用VB.NET,但我可以從C#翻譯很好。任何幫助,將不勝感激。
我只是不希望其中的一個應用程序,用戶不得不在應用程序的不同部分重新加載十幾次以獲取新數據。
更新:
- 所有上下文中使用塊,他們不再需要後處理掉的創建:
行,所以如下我已經改變了我的應用程序。
- 加載時,所有實體在處理前都從上下文中分離出來。
- MainViewModel(ContextUpdated)中的新屬性引發了所有其他ViewModel預訂的事件,該事件運行ViewModels RefreshEntities方法。
- 執行此操作後,我開始出現錯誤,指出某個實體一次只能由一個ChangeTracker引用。由於我無法弄清楚哪個上下文仍在引用該實體(不應該是任何上下文?),我將該對象作爲IEntityWithChangeTracker轉換,並將SetChangeTracker設置爲空(Null)。
這讓當前的問題: 當我null值,實體的changeTracker,然後將其連接到一個背景下,它失去了它的狀態發生了改變,並沒有更新到數據庫中。但是,如果我不更改更改跟蹤器,我無法附加。我有我自己的更改跟蹤代碼,所以這不是問題。
我的新問題是,你應該如何做到這一點。一個很好的示例實體查詢和實體保存代碼會被剪掉很長一段時間,因爲我試圖獲得我曾經認爲是一個簡單的事務才能工作。
如果你downvote,我很樂意解釋。至少它會讓我知道什麼不該在路上進一步做。 – CodeWarrior 2012-12-03 19:20:10