4

複数のテーブルのデータを含むビューがあります。

そのビューを呼び出すと、結果がメモリに読み込まれて保存されます。ビューに影響を与えるはずの他のテーブルにいくつかの変更を加えた後、ビューは変更について何も知りません。

そのため、Get() メソッドなどでそのビューを再度呼び出すと、EF は格納されたデータの値を返します。

もちろん、最新のデータが欲しいです。ビューがメモリからではなくDBからデータを取得するように強制するにはどうすればよいですか? または、より良い戦略はありますか?

加えられた変更をビューに認識させることができればより良いでしょう。これは、おそらく HasRequired() メソッドを使用して FK をマップすることによって、エンティティ構成で達成できますか?

編集: リポジトリと作業単位パターンを使用しています。したがって、毎回新しいコンテキストを作成して破棄するわけではありません。これを考慮してください。

4

1 に答える 1

9

ビューで Linq クエリを実行するときは、AsNoTracking()拡張メソッドを使用します。これにより、EF は常にメモリではなくデータベースからのデータを使用するようになります。

var result = from x in context.ViewSet.AsNoTracking()
             select x;

EF は、自動データ更新を処理しません。

于 2012-08-01T12:49:43.757 に答える