我有一個基於經典不同層次的n層應用程序:用戶界面,服務(WCF),業務邏輯和數據訪問。數據庫(Sql Server)顯然是通過實體框架被打破的,問題基本上是每個調用都從用戶界面開始並貫穿所有層,但這樣做需要每次爲每個操作創建一個新的ObjectContext,這使得性能非常糟糕,因爲每次我需要重新加載元數據並重新編譯查詢。實體框架和ObjectContext n層體系結構
最建議圖案這將是下面的一個,它是什麼,我實際上做:創造和傳遞新的上下文throught每個服務接收到呼叫
public BusinessObject GetQuery(){
using (MyObjectContext context = new MyObjectContext()){
//..do something } }
爲了便於實時業務層的方法查詢我沒有看到任何特定的dealy,它工作正常,但對於複雜和沉重的查詢,它使2秒鐘的查詢繼續每次調用15秒。
我可以設置ObjectContext靜態,它可以解決性能問題,但它似乎不被任何人建議,也因爲我不能同時從不同的線程和多個調用同時訪問上下文一個例外。我可以讓它成爲線程安全的,但長時間維持相同的ObjectContext會使它變得越來越大(並且越來越慢),因爲它導入的引用每個查詢都會執行查詢。
我擁有的體系結構我認爲這是最常見的,那麼實現和使用ObjectContext的最佳方法是什麼?
謝謝 馬爾科
是的,我已經讀了文章,這就是爲什麼我不使用Singleton模式,我不明白爲什麼當我每次創建一個新的objectcontext時,對於複雜查詢來說性能很糟糕 – MaRuf 2012-02-13 14:29:52
'每次'都是什麼意思?那是在重新編譯你的代碼並啓動你的應用程序?還是多次執行一個函數? – 2012-02-13 14:33:22
我的意思是每次用戶界面調用服務時,它會創建一個新的ObjectContext,執行一個查詢並返回一些結果,每次我執行此操作時它都很慢,如果我在同一個調用中執行此操作多次,第一次 – MaRuf 2012-02-13 14:36:43