2009-04-21 49 views
5

LINQ的对象当显示我的主窗口,我做对象的列表从LINQ到SQL:C#:如何绕过

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对象名称:在Dispose后访问'DataContext'。”
Source =“System.Data.Linq”
ObjectName =“Dispose后访问的DataContext”。

我想这当属绑定列表的显示赛季名单的结果,需要在赛季名单中填充或东西:

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

现在,我想知道,这是应该怎么做? 我是否需要创建一个新的DataContext对象并再次检索选定的节目,或者是否有可能使用新的数据环境重新验证我的节目以填充季节列表?

我想我有点失去了....

+0

WPF或Silverlight请添加相关标签? – AnthonyWJones 2009-04-21 18:51:34

+0

对不起。这是WPF。 – Vegar 2009-04-21 19:32:40

回答

10

不要使用“使用”的语句与您的DataContext。 请参考这个帖子:Disposing DataContext

+3

我认为这是使用datacontexts的方式 - 创建,使用和处置。我想我错了。:)谢谢。 – Vegar 2009-04-21 18:55:57

5

当您使用using()块,它调用Dispose()上无论你投入其初始化(在这种情况下,你的情况下)。当处理LINQ to SQL上下文时,使用它创建的实体也是如此。我建议在您的Form上下文中创建一个实例变量,并将代码插入ForDispose(bool)函数(位于Designer.cs文件中)以处理上下文。

1

是否有理由不能长时间维护DataContext对象,可能会将其作为资源保存在页面中。通常情况下,您不希望DataContext生存时间过长,但是如果它仅用于与当前页面相关的查询并且与可能是妥协的页面一起处理。

在Datacontext中表示的后端值变化很快的多用户环境中,您应该要小心。不过,我认为电视节目表并不会迅速改变。

0

实际上,除了datacontext之外,还有其他有效的理由使用这些对象。将对象传递回Web服务调用怎么样?