Как я могу отклонить все изменения в Linq к DataContext SQL?

Нет, delete [] используется для удаления массива. Если вам нужно удалить элементы массива, вам нужно вызвать delete для каждого из них.

44
задан Luke 4 November 2008 в 04:39
поделиться

6 ответов

В .net 3.0 используйте db.GetChangeSet (). Updates.Clear () для обновления, db.GetChangeSet (). Inserts.Clear () для новых или db.GetChangeSet (). Deletes.Clear () для удаленных элементов.

В .net 3.5 и выше результат GetChangeSet () теперь доступен только для чтения, зацикливайте коллекцию в for или foreach и обновите каждую таблицу ChangeSet, как также написал macias в своем комментарии.

10
ответ дан 26 November 2019 в 22:03
поделиться

Почему бы не отбросить контекст данных и просто заменяют его новым экземпляром?

30
ответ дан Haacked 4 August 2019 в 17:07
поделиться

Как упомянутый Haacked, просто отбросьте контекст данных.

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

9
ответ дан Richard Poole 4 August 2019 в 17:07
поделиться

Обновление будет работать, однако необходимо дать объекты, которые Вы хотите сбросить.

, Например

dataContext.Refresh(RefreshMode.OverwriteCurrentValues, someObject);
4
ответ дан David Basarab 4 August 2019 в 17:07
поделиться

Вы можете использовать GetOriginalEntityStateState (..) , чтобы получить исходные значения для объектов e.g. Клиенты используют старые кэшированные ценности.

Вы также можете итерации через изменения E.G. Обновления и обновляют только определенные объекты, а не все таблицы, потому что штраф производительности будет высоким.

foreach (Customer c in MyDBContext.GetChangeSet().Updates)
        {
            MyDBContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, c);
        }

Это вернет изменения, используя сохраненные данные в базе данных.

Другое решение состоит в том, чтобы сбросить файл DataContext, который вы используете, используя Dispose ().

В любом случае - это хорошая практика для переопределения вставки и удаления методов в коллекции E.G. Клиенты, которые вы используете и добавляете E.G. Вызов insertonsUbmit (). Это разрешит вашу проблему со вкладыванием вставки и удаления.

3
ответ дан 26 November 2019 в 22:03
поделиться

Calling Clear() on the Updates, Deletes and Inserts collection doesn't work.

GetOriginalEntityState() может быть полезна, но она дает только идентификаторы для внешних ключевых связей, а не действительные сущности, так что вы остаетесь с отщепленным объектом.

Вот статья, которая объясняет, как отбрасывать изменения из контекста данных: http://graemehill.ca/discard-changes-in-linq-to-sql-datacontext

EDIT: Вызов функции Refresh() отменяет обновления, но не удаляет и вставляет.

9
ответ дан 26 November 2019 в 22:03
поделиться
Другие вопросы по тегам:

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