views:

395

answers:

2

Hi, I am using entity framework 4 to create entities from DB.

I have 2 entity contexts to connect to db. let's say context1 and context2

However, when I do the following steps, 1. get data from context1 2. get same data row from context2 3. update same data row to context1 4. get same data row from context2

context2 doesn't change after updating in step 3.

I guess context2 cached the data. not getting data from db everytime.

how to fix it?

Thanks~

A: 

You have to call SaveChanges() to, well, save the changes (back to the DB).

Furthermore, if you've already enumerated the collection from step 2, then you won't have the updates from step 3, even if you're saving changes back to the database.

Jay
+1  A: 

The Entity Context get the data from the database only once then it have cached in memory.

To get the data from the Database, you have first to call SaveChanges() on Context1. Then, to call Refresh(RefreshMode.StoreWins, Context2.EntityToRefresh) to get the database values in the context2.

You can also use a Share/Static context to do your queries, in that you can be sure that you have the same data for all your queries.

You can implement it like this

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;
        }
    }
} 
Zied