1

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

我有 2 个实体上下文可以连接到数据库。假设 context1 和 context2

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

在步骤 3 中更新后 context2 不会改变。

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

如何解决?

谢谢~

4

2 回答 2

5

实体上下文只从数据库中获取数据一次,然后它就缓存在内存中。

要从数据库中获取数据,您必须首先调用SaveChanges()Context1。然后,调用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;
        }
    }
} 
于 2010-01-26T04:16:22.567 回答
0

您必须调用SaveChanges()保存更改(返回数据库)。

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

于 2010-01-26T02:23:01.233 回答