1

エンティティ フレームワーク 4 を使用して、DB からエンティティを作成しています。

データベースに接続するエンティティ コンテキストが 2 つあります。context1 と context2 としましょう

ただし、次の手順を実行すると、1. context1 からデータを取得する 2. context2 から同じデータ行を取得する 3. 同じデータ行を context1 に更新する 4. context2 から同じデータ行を取得する

手順 3 で更新した後、context2 は変更されません。

context2 がデータをキャッシュしたと思います。毎回dbからデータを取得していません。

それを修正する方法は?

ありがとう〜

4

2 に答える 2

5

エンティティコンテキストは、データベースからデータを1回だけ取得してから、メモリにキャッシュします。

データベースからデータを取得するには、最初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()変更を保存する (DB に戻る) ように呼び出す必要があります。

さらに、ステップ 2 のコレクションを既に列挙している場合は、変更をデータベースに保存し直しても、ステップ 3 の更新はありません。

于 2010-01-26T02:23:01.233 に答える