0

Entity Framework (任意のバージョン) で DB クエリ キャッシュをクリアするために、この Rails の輝きに相当するものはありますか? 私はこの問題を抱え続けており、それを解決する簡単な方法を見つけることができないようです:

すべての関連付けメソッドはキャッシュを中心に構築されており、最新のクエリの結果を今後の操作で使用できるように保持します。キャッシュはメソッド間でも共有されます....

しかし、データがアプリケーションの他の部分によって変更された可能性があるため、キャッシュを再読み込みしたい場合はどうすればよいでしょうか? 関連付け呼び出しに true を渡すだけです。

customer.orders                 # retrieves orders from the database
customer.orders.size            # uses the cached copy of orders
customer.orders(true).empty?    # discards the cached copy of orders
                                # and goes back to the database
4

1 に答える 1

1

可能ですが、これらのメソッドはエンティティで直接利用できません。これを実現するには、コンテキストと対話する必要があります。

単一のインスタンスだけをリロードする必要がある場合は、次を使用できます。

dbContext.Entry(order).Reload();

1 回の呼び出しで複数のインスタンスをリロードする必要がある場合は、おそらく ObjectContext API を使用する必要があります。

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.Refresh(RefreshMode.StoreWins, customer.Orders);

もう 1 つの方法は、使用する代わりにクエリを実行するRefreshことですが、正しい注文を読み込むためにクエリを明示的に作成する必要があります。

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var objectSet = objectContext.CreateObjectSet<Order>();
objectSet.MergeOption = MergeOption.OverwriteChanges;
objectSet.Where(o => o.CustomerId == customer.Id).ToList();

query と will の主な違いはRefresh、パフォーマンス (Refreshおそらくコレクション内の注文ごとに個別のクエリを使用します) と新しいエンティティ (refresh は指定したエンティティのみを再読み込みしますが、query は新しいものも読み込みます) です。

于 2012-09-10T08:13:14.137 に答える