這是我在過去所做的那樣(絕不是「最佳做法」,但它已經爲我工作,所以這裏有雲):
使用一種「訪客模式」。有一個你的表格(或者演示者,或者你使用的任何模式)訂閱的類,表明他們想要通知變化。然後在SaveChanges()
上沿着ChangeSet
去通知已經請求它的那些方。我已經通過表單/演示者只訂閱特定類型的更改來優化此功能,並且我將其批給他們。每個表單都會根據他們想要的數據執行任何操作(刷新商店中的當前實體,檢查網格上顯示的實體等)。
此外,我有一個DateTime
件上的每個記錄,併爲每個記錄的主編輯集合(記錄的特殊表(大幹快上SaveChanges
自動popullated)放眼全球,「客戶」,「發票」等),其中最後一次有DateTime
這些記錄被更新。如果需要的話,我可以使用計時器進行輪詢(我使用該計時器進行應用程序間通信,而不是在當前應用程序內的表單之間進行通信)。
根據您的需要,在線程上執行所有更改可能適用於您。如果你的計算真的需要很長時間(或者在SaveChanges
上設置併發檢查),你可能需要設置軟鎖(在應用程序中控制它們,禁用Save
按鈕或者網格的可編輯性,或者其他)用戶無法保存在該線程上正在修改的記錄,但是再次,這取決於您的UI/UX偏好或要求。
我不直接綁定到DbSet
(如果您正在處理多個上下文,則不需要Local
),我有一個綁定的集合。「數據在其他地方未更新」應該由點來解決1
再次,我不是說這是「最好」或「推薦」的方式,但我已經用它,對我來說,它工作得很好。你的旅費可能會改變。
PS:不是官方或任何東西,但這種聯繫可能是管理的生命週期一個有趣的閱讀你DbContext
(可能是或可能是不是有點過了原來的問題):http://mehdi.me/ambient-dbcontext-in-ef6/(免責聲明:我不知道使用他的「dbcontextscopes」,並指向這個鏈接的文本閱讀,我不知道他的代碼是否會好)
來源
2015-08-25 10:15:08
Jcl
記住你應該創建一個新的'DbContext'實例與每個操作:不要用UI元素保持打開狀態。 EF圍繞「工作單元」模式進行設計。 – Richard
每個帖子有一個問題請!並顯示您有問題的*代碼*。我們不能對模糊描述做任何事情,比如「很多非靈活的回調」,「有時不會更新」等等。 –
@HighCore我不認爲WPF或MVVM實際上解決了所提到的任何問題問題(不同上下文之間的同步,綁定到本地集合,更新大量記錄時阻止長時間運行的任務等)。 – Jcl