2009-06-21 20 views
1

私のアプリケーションは、ADO.NET Data Serviceを使用するクライアント/サーバーソリューションです。次のようにデータサービスはtransactionSummaryDataを公開:ADO.NETデータサービスが動的に更新されない

public IQueryable<TransactionSummary> TransactionSummaries 
{ 
    get { return MainForm.transactionSummaryData.Items.AsQueryable(); } 
} 

transactionSummaryDataは、その項目プロパティは以下のように定義された型TransactionSummariesは次のとおりです。クライアント側では

public List<TransactionSummary> Items 

、私はLINQクエリにデータバインドいくつかのコントロールを持っていますこれはTransactionSummariesで動作します:

AvailibilityBox.DataContext = (from salesdata in srv.TransactionSummaries 
           where salesdata.PerformanceID == selectedshow.performancedata.PerformanceID 
           select salesdata); 

これは、選択されたパフォーマンスデータとパフォーマンスの変化が何度も実行されます。 UIをナビゲートするユーザへの応答。

これまでのところすべて良いです。ただし、サーバーのtransactionSummaryDataがサーバー内の他のコードによって更新されると、クライアントは「古い」データを表示し続け、更新を認識しません。私はこれが何らかのキャッシュのためであると仮定します。コードをデバッグすると、サーバーが適切なデータを送信しているのがわかりますが、クライアントのLINQクエリは失効したデータを返し続けます。クライアントを再起動すると、正しいデータが表示されます。

私はここで何かが分かりませんが、クライアント上のキャッシュを制御する方法や、接続を再作成せずにオブジェクトを無効にする方法がわかりません。

答えて

1

エムレ・メリック:

たDataServiceContextのデフォルトのマージオプションがAppendOnlyで、もしエンティティがで返されることを意味し、ここでMSDNリンクを参照してください。クエリが既にコンテキストによって追跡されている場合、変更は行われません。エンティティを永続ストレージから常に更新する場合は、MergeOptionをOverwriteChangesに設定できます。

MSDN Reference

0

DataContextの "ObjectTrackingEnabled"プロパティをfalseに設定した場合、問題はなくなるはずです。私の質問に答えるために管理し、Microsoftのフォーラムで

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.objecttrackingenabled.aspx

+0

私は私が(ないのDataContext)を使用していたDataServiceContextの "ObjectTrackingEnabled" プロパティを見つけることができません。 –

+0

最初の2つの文を完全に誤読しています。 – womp

関連する問題