实体框架中的缓存问题4

时间:2010-01-26 02:09:22

标签: .net entity-framework-4

我正在使用实体框架4从DB创建实体。

我有2个实体上下文连接到db。 让我们说context1和context2

但是,当我执行以下步骤时, 1.从context1获取数据 2.从context2获取相同的数据行 3.将相同的数据行更新为context1 4.从context2获取相同的数据行

在步骤3中更新后,

context2不会改变。

我猜context2缓存了数据。每次都不从db获取数据。

如何解决?

感谢〜

2 个答案:

答案 0 :(得分: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;
        }
    }
} 

答案 1 :(得分:0)

您必须致电SaveChanges(),然后保存更改(返回数据库)。

此外,如果您已经枚举了步骤2中的集合,那么即使您将更改保存回数据库,也不会从步骤3获得更新。