Вопрос по linq-to-sql, wpf, datacontext, c# – Как вы очищаете изменения в LinqToSql?

2

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

Я думал, что мог бы использовать dataContext.GetChangeSet (). Updates.Clear (), но по какой-то причине коллекция доступна только для чтения.

Я также пытался использовать dataContext.Refresh, но это также не работает, так как объект не существует в базе данных, я создал его вручную из SP.

Пожалуйста помоги. Благодарю.

Ваш Ответ

2   ответа
3

(или DeleteAllOnSubmit) для удаления вставок, следующее фактически отменит любые обновления, а также:

// clears any updates.  
ChangeSet changes = dataContext.GetChangeSet();
dataContext.Refresh(RefreshMode.OverwriteCurrentValues, changes.Updates);   
Но я думаю, что нет необходимости очищать вставки, так как вы можете поставитьInsertOnSubmit() в блок if-else, который зависит от результата диалога.
+1 Работает для обновлений, но не для вставок.
2

вероятно, повторно запросить в отдельном контексте данных. Выcan отменить вставку (из набора изменений), используяDeleteOnSubmit (и наоборот), но я бы не стал, сам.

GetOriginalEntityState () для каждой таблицы
о хорошо, так что есть старая версия, которую я могу использовать, где это, пожалуйста? Я понимаю, что вы слишком много загружаете, но я не вижу альтернативы, спасибо. HAdes
так вы хотите создать новый текстовый текст и снова получить данные? Если так, то это очень медленно, так как в моей коллекции много предметов. Я надеялся, что где-то будет храниться копия объекта, чтобы можно было откатить любые изменения (например, функцию отмены). HAdes
На мой взгляд, было бы плохой идеей повторно запросить отдельный текстовый текст. Если вы не обновляете все таблицы, существует возможность «одного и того же ключа»; произошла ошибка Если вы обновляете и используете немедленную загрузку, это может быть дорогой операцией. Я бы использовал решение HAdes.
В трекере изменений есть старая версия; но идея контекста данных заключается в том, что он является единицей работы; не база данных. Похоже, вы просто загружаете в него слишком много данных, чтобы начать с ...

Похожие вопросы