5

メイン ウィンドウを表示するときに、linq-to-sql からオブジェクトのリストを作成します。

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

ここで、リスト内の項目をダブルクリックすると、選択したオブジェクトを新しいユーザー コントロールで使用したいと考えています。

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

さて、これは例外になります:

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

これは、リストをショーのシーズンリストにバインドした結果であり、シーズンリストにデータを入力する必要があるか、何かが必要なためだと思います。

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

さて、私が知りたいのは、これがどのように行われることになっているのですか? 新しい DataContext オブジェクトを作成して、選択したショーを再度取得する必要がありますか? または、ショーを新しい datacontext に再接続してシーズン リストに入力することは可能ですか?

ちょっと寂しいかな……。

4

4 に答える 4

10

datacontextで「using」ステートメントを使用しないでください。この投稿を参照してください:DataContextの破棄

于 2009-04-21T18:14:53.667 に答える
5

using()ブロックを使用するとDispose()、初期化子(この場合はコンテキスト)に入力したものがすべて呼び出されます。LINQ to SQLコンテキストが破棄されると、それを使用して作成されたエンティティも破棄されます。コンテキスト用にインスタンス変数を作成し、 mの関数(ファイル内)にFormコードを挿入してコンテキストを破棄することをお勧めします。ForDispose(bool)Designer.cs

于 2009-04-21T18:16:55.657 に答える
1

DataContext オブジェクトをより長く維持できない理由はありますか? おそらくページ内のリソースとして保持してください。通常、DataContext をあまり長く存続させることは望ましくありませんが、現在のページに関連するクエリにのみ使用され、ページと共に破棄される場合は、良い妥協点となる可能性があります。

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

于 2009-04-21T18:51:39.910 に答える
0

実際には、データコンテキストとは別にこれらのオブジェクトを使用する正当な理由があります。オブジェクトを Web サービス呼び出しに戻すのはどうですか?

于 2009-06-04T16:11:54.467 に答える