c #: как передавать linq-объекты вокруг - PullRequest
5 голосов
/ 21 апреля 2009

При отображении моего главного окна я делаю список объектов из 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 не обработано
Сообщение = "Невозможно получить доступ к удаленному объекту. \ R \ nИмя объекта: 'DataContext получен после Dispose.'."
Источник = "System.Data.Linq"
ObjectName = "DataContext, доступ к которому осуществляется после удаления."

Полагаю, это связано с привязкой списка к списку сезонов шоу, и список сезона должен быть заполнен или что-то в этом роде:

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

Теперь, что я хотел бы знать, как это должно быть сделано? Нужно ли создавать новый объект DataContext и снова извлекать выбранное шоу, или можно повторно соединить мое шоу с новым текстом данных, чтобы заполнить список сезонов?

Полагаю, я немного растерялся ...

Ответы [ 4 ]

10 голосов
/ 21 апреля 2009

Не используйте оператор "using" с вашим текстовым контентом. Пожалуйста, обратитесь к этому сообщению: Утилизация DataContext

5 голосов
/ 21 апреля 2009

Когда вы используете блок using(), он вызывает Dispose() для всего, что вы положили в его инициализатор (в данном случае, ваш контекст). Когда контекст LINQ to SQL удаляется, сущности, созданные с его помощью, также являются. Я бы предложил создать переменную экземпляра в вашем Form для контекста и вставить код в вашу For m * функцию 1005 * (она находится в файле Designer.cs), чтобы избавиться от контекста.

1 голос
/ 21 апреля 2009

Существует ли причина, по которой вы не можете поддерживать объект DataContext дольше, возможно, удерживайте его в качестве ресурса на странице. Обычно вы не хотите, чтобы DataContext работал слишком долго, однако, если бы он использовался только для запросов, относящихся к текущей странице, и располагался на странице, которая может быть хорошим компромиссом.

Вы должны быть осторожны в многопользовательской среде, где значения бэкэнда, представленные в текстовом тексте данных, быстро изменяются. Однако я думаю, что телевизионные расписания не меняются быстро.

0 голосов
/ 04 июня 2009

На самом деле есть веские причины использовать эти объекты отдельно от текста данных. как насчет передачи объектов обратно на вызов веб-службы?

...