2010-01-26 31 views
1

我正在使用實體框架4從數據庫創建實體。實體框架中的緩存問題4

我有2個實體上下文連接到數據庫。 假設CONTEXT1和上下文2

然而,當我做下面的步驟,從CONTEXT1 2. 1.獲取數據得到上下文2 3.更新相同的數據行相同的數據行CONTEXT1 4.獲得相同的數據從上下文2

上下文2行中的第3步

更新後,我想上下文2緩存的數據不會改變。每次都不從db獲取數據。

如何解決?

謝謝〜

回答

0

你必須調用SaveChanges(),好了,將更改保存(回DB)。此外,如果您已經從第2步中枚舉了集合,那麼即使將更改保存回數據庫,也不會從第3步獲取更新。

5

實體上下文只從數據庫獲取數據一次,然後將其緩存在內存中。

要從數據庫中獲取數據,首先需要在Context1上調用SaveChanges()。然後,調用Refresh(RefreshMode.StoreWins, Context2.EntityToRefresh)以獲取context2中的數據庫值。

您也可以使用共享/靜態上下文來執行查詢,因爲您可以確保所有查詢都具有相同的數據。

您可以實現像這樣

public class SharedObjectContext 
{ 
    private readonly WestwindEntities context; 

    #region Singleton Pattern 

    // Static members are lazily initialized. 
    // .NET guarantees thread safety for static initialization. 
    private static readonly SharedObjectContext instance = new SharedObjectContext(); 

    // Make the constructor private to hide it. 
    // This class adheres to the singleton pattern. 
    private SharedObjectContext() 
    { 
     // Create the ObjectContext. 
     context = new WestwindEntities(); 
    } 

    // Return the single instance of the ClientSessionManager type. 
    public static SharedObjectContext Instance 
    { 
     get 
     { 
      return instance; 
     } 
    } 

    #endregion 

    public WestwindEntities Context 
    { 
     get 
     { 
      return context; 
     } 
    } 
}