我們正在編寫一個使用實體框架(具有RIA服務的Silverlight精確)的WPF應用程序。我們通過應用程序使用共享的ObjectContext,以便我們可以通過模塊共享數據獲益。Windows/WPF/Silverlight應用程序中的實體框架ObjectContext
問題是 - 如果用戶在工作期間打開讓我們說歷史銷售,它將被加載到ObjectContext並保持到應用程序結束。所以應該使用另一種模式。
我知道ObjectContexts應該用作單個工作單元。但是,那麼,您如何讓應用程序的其他部分知道某些內容已更改,並且應該重新加載其數據?
編輯:好吧,EventAggregator,但是,然後,這將導致所有其他部分重新加載它們(可能大部分是重複的)數據。所有類型的企業集團也可能需要許多事件。
你如何解決這些問題?我目前的解決方案是一種妥協 - 爲共享應用程序使用的核心數據使用共享的ObjectContext,以便它們可以自動共享和更新。對於大量的數據,使用一個新的單獨的ObjectContext。任何更好的想法?
有沒有辦法如何從他們的DataContext中「釋放」實體,以便垃圾收集器可以完成它的工作並釋放內存?
有了這個應用程序,我們正在討論Silverlight。使用Prism/Caliburn,我認爲每個視圖(模塊?)都有一個ObjectContext是沒有問題的。同樣,如果有很多數據要加載到客戶端,問題是什麼? 就我而言,最好的解決方案是爲通過整個應用程序使用的基本實體創建一個共享的ObjectContext,以便它們自動同步,並分離ObjectContexts以加載大量數據。一些歷史報道。 – gius 2010-01-03 23:06:52
我不會嘗試發送真正的大塊數據給客戶端。相反,我會在服務器上進行過濾,並只返回客戶希望在那一刻看到的結果。人類無法讀取100,000條記錄,因此不要將這麼多記錄發送給人類。相反,讓問題成爲搜索/過濾器,並只將結果發送給客戶端。如果您正在構建報告,請在服務器上創建彙總彙總數據。例如,計算服務器上的每月銷售量並向客戶端發送單個數字比查看5000條銷售記錄更好。 – 2010-01-04 18:03:59
的確如此,但如果用戶在應用程序生命週期中的任何時候都能看到,比如說第1,10,20頁,那麼這些數據仍將存儲在內存中。另一方面,使用單獨的ObjectContext和數據分頁可以解決大數據駐留內存問題。 – gius 2010-01-04 19:03:10