2009-05-15 15 views
1

2つのテーブル(Knicks and Knacks)と2つのテーブルを結合するビュー(PaddyWhacks)があります。テーブルは次のフィールドがあります。SQLビューのデータが正しく更新されない

Knicks.key, Knicks.data1 

Knacks.fkey, Knacks.data2 

をので、ビューが含まれています

PaddyWhacks.key, PaddyWhacks.data1, PaddyWhacks.data2 

私はIQueryableをし、すべてがよさそうだとして完全なビューを取得するために、SQLにLINQを使用しています。私はDATA1の== 5ニックスにカウント()を実行する場合、結果が変化した(私はできるので、更新は、正しい知っ

Knick k = db.Knicks.Single(row => row.data1 == 5); 
k.data1 = 6; 
db.SubmitChanges(); 

をこの後、私はニックスから行を取得し、それを更新しますデータベース内を覗いて、変更を参照してください)。しかし、私は再び使用してPaddywhacksを取得する場合:

IQueryable<PaddyWhack> rows = from row in db.PaddyWhacks select row; 

対応するDATA1値がまだある5

アプリケーションがホストされたWebサーバ上で実行されていると私は十分な長待って戻ってきた場合に再試行します、更新された値がIQueryableビューに表示されます。私は何かがキャッシュされていると推測しているかもしれませんし、おそらくLINQはデータを再び取得するためにデータベースに戻っていません。問題を解決するために必要なLINQまたはSQL Server機能がありますか?

+0

これはかなり怖いです。 –

答えて

1

私はlinqtosqlを使用しませんが、何かがキャッシュにあることは間違いありません。ビューは単なる「マクロ」クエリであり、データは元のテーブルのデータなので、常に最新の状態です。私はIQueryable()とは異なる機能を使用しようとするか、新しい接続を作成してからクエリを実行します。

+0

2回目にビューを要求するときに、キャッシュされた情報をクリアする方法はありませんか?私は完全にビューを使用して離れて移動しようとしているが、まだそれを行うことはできません。 –

+1

私はクエリの前に新しいDataContextを作成しました。これまでのところ、これはパフォーマンスを殺すわけではありませんが、私が目を覚ますものです。 –

1

あなたはこのようにDataContextをリフレッシュしようとすることができます:

dc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, rows); 
+0

LINQクエリを発行する直前にこれを呼び出すと思いますか?または、クエリの結果を使用した後にRefresh()を呼び出すだけで十分ですか?つまり、Refresh()はすぐにデータを更新するのですか、それとも後で更新するためにマークするだけですか? –

関連する問題