2009-04-21 9 views
5

周りLINQ-オブジェクトを渡すために、私は、LINQからSQLへのオブジェクトのリストを作る:C#の:どのように私のメインウィンドウを表示する際

using (var context = new Data.TVShowDataContext()) 
{ 
    Shows = new ObservableCollection<Data.Show>(context.Shows); 
    listShows.ItemsSource = Shows; 
} 

、私は私のリストの項目をダブルクリックすると、I新しいユーザーコントロールで選択したオブジェクトを使用したい:

ShowEpList epList = new ShowEpList(); 
epList.DataContext = (Data.Show)listShows.SelectedItem; 

さて、これは例外が発生:

System.ObjectDisposedExceptionは未処理でした メッセージ= "破棄されたオブジェクトにアクセスできません。\ r \ nオブジェクト名: '廃棄後にアクセスされたDataContext'。"
Source = "System.Data.Linq"
ObjectName = "Dispose後にアクセスされたDataContext"

私は、これはショーのシーズンリストにリストを結合した結果として来る推測、そして季節リストが読み込まか何かする必要があります:私はしたいものを、今

<ListBox Name="listSeasons" ItemsSource="{Binding Seasons}"/> 

知っている、これはどうやってやるの? 新しいDataContextオブジェクトを作成して、選択した番組を再度取得する必要がありますか、seasons-listにデータを入れるために新しいdatacontextで番組を再視聴することは可能ですか?

私は失わ少しだと思います....

+0

WPFまたはSilverlight関連タグを追加してください – AnthonyWJones

+0

申し訳ありません。それはWPFです。 – Vegar

答えて

10

は、あなたのDataContextとの声明を「使用」は使用しないでください。 はこの記事を参照してください:あなたはusing()ブロックを使用する場合Disposing DataContext

+3

私は、これがdatacontextを使用する方法であると考えました - 作成、使用、および廃棄してください。私は間違っていたと思う.. :)ありがとう。 – Vegar

5

、それはあなたが(この場合は、あなたのコンテキスト)の初期化子の中に入れているものは何でも上Dispose()を呼び出します。 LINQ to SQLコンテキストが破棄されると、それと共に作成されたエンティティも同様になります。文脈のためにあなたのFormのインスタンス変数を作成し、あなたのFormのDispose(bool)関数(それはDesigner.csファイルにあります)にコードを挿入して、コンテキストを処分することをお勧めします。

1

DataContextオブジェクトを長く維持できない理由がありますか?おそらくページ内のリソースとして保持してください。通常は、現在のページに関連するクエリに対してのみ使用され、適切な妥協である可能性のあるページが配置されている場合は、DataContextのライフサイクルが長すぎることは望ましくありません。

Datacontextで表されるバックエンド値がすばやく変更されるマルチユーザー環境では、注意が必要です。しかし、私はテレビのスケジュールが急速に変化し続けるとは思わないでしょう。

+0

データが急激に変化するかどうかは関係ありません。破棄する唯一の理由は、データベース接続を解放することです。私が理解できないものがない限り、その場合は、私を教えてください。 –

+0

実際に私は、DataContextが開いている接続を保持していないことを読んだだけで、DataContextが状態の変化を追跡するため、メモリをより頻繁に解放する必要がなければ、処理する理由はありません。長時間実行されているサーバーアプリケーションだけが、状態の追跡に多大なメモリを占有する問題に遭遇する可能性があります。最終的にGCはメモリを自動的に解放するので、メモリ使用に問題がある場合は処分するだけで済むので、最適化に役立ちます。 –

0

実際には、datacontext以外のオブジェクトを使用する正当な理由があります。オブジェクトをWebサービス呼び出しに戻すのはどうですか?

関連する問題