Bezdepbonusu7Программирование: статьи и ответы

Вопрос

C #: Как передавать linq-объекты

Автор вопроса: VegarОтветов: 4

Показывая свое главное окно, я составляю список объектов из 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 = " DataContext, доступ к которому осуществляется после Dispose. "

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

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

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

Думаю, я немного заблудился ....

  • WPF или Silverlight, пожалуйста, добавьте соответствующий тег? AnthonyWJones 21.04.2009

wpflinq-to-sqldatacontext

Ответы

Ответ 1 · рейтинг 10 · Jose Basilio

Не используйте оператор using в тексте данных. См. Это сообщение: Удаление контекста данных

Ответ 2 · рейтинг 5 · Adam Robinson

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

Ответ 3 · рейтинг 1 · AnthonyWJones

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

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

Ответ 4 · Community

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы