2014-02-26 34 views
1

我現在正在使用Visual Studio 2008和MSSQL Server 2005開發的一個用N層體系結構設計的大項目中工作。在該項目中,使用了依賴注入的存儲庫模式統一。清理LINQ Cache和DataContext的問題

第一個問題出現在數據庫中的插入,更新等操作當時未插入或更新數據時,必須關閉應用程序並重新打開以查看新數據。

經過長時間的閱讀後,發現問題在於未正確清理的LINQ緩存。我們解決了類插入的問題,所有的實體實施以下方法:

public void ClearCache() 
{ 
    DataContextFactory.GetDataContextInstance(true); 
    Context.Log = Console.Out; 
} 

這是DataContextFactory類:

public static class DataContextFactory 
{ 
    public static PromedDataContext Context; 

    public static PromedDataContext GetDataContextInstance(bool recreate) 
    { 
     return Context != null && !recreate ? Context : (Context = new PromedDataContext(GlobalAttributesProvider.DbConnectionPath)); 
    } 
} 

的解決方案是創建DataContext的每一個新實例當你調用上述ClearCache方法後,它會插入或更新值。

問題是,一段時間後,這個解決方案的工作,但在我試圖在數據庫中插入數據時,在一個時刻開始出現另一個問題。錯誤是如下:

We attempted to attach or add an entity that is not new. Perhaps he had loaded another DataContext element. This operation is not supported.

閱讀,而這個錯誤後,我解決只是徵求意見的ClearCache方法的身體,因爲這是創建DataContext的,當然,這打破了我的解決方案的多個實例分段緩存。

我的問題是:

還有另一種方式來清潔提到緩存避免上述錯誤? 要修復上述錯誤,請保留完整的ClearCache方法?提前

任何幫助

謝謝讚賞。

回答

0

DataContext應該生活,只要「工作單元」需要。對於Web應用程序,這通常是一個HTTP請求。

對於正在進行的所有工作,您正在分享DataContext。它不應該以這種方式使用。其中的實體不是緩存。它們對於保持DB狀態和內存中狀態同步至關重要。

研究LINQ to SQL中的工作單元意味着什麼,並應用最佳實踐。目前,您正在濫用該框架,並將不得不執行極端的扭曲才能使其工作。