Нет, delete []
используется для удаления массива. Если вам нужно удалить элементы массива, вам нужно вызвать delete
для каждого из них.
В .net 3.0 используйте db.GetChangeSet (). Updates.Clear ()
для обновления, db.GetChangeSet (). Inserts.Clear ()
для новых или db.GetChangeSet (). Deletes.Clear ()
для удаленных элементов.
В .net 3.5 и выше результат GetChangeSet () теперь доступен только для чтения, зацикливайте коллекцию в for или foreach и обновите каждую таблицу ChangeSet, как также написал macias в своем комментарии.
Почему бы не отбросить контекст данных и просто заменяют его новым экземпляром?
Как упомянутый Haacked, просто отбросьте контекст данных.
Вы, вероятно, не должны поддерживать контекст данных в течение долгого времени. Они разработаны, чтобы использоваться транзакционным способом (т.е. один контекст данных на атомарную единицу работы). Если Вы поддерживаете контекст данных в течение долгого времени, Вы рискуете генерации исключения параллелизма при обновлении устаревшего объекта.
Обновление будет работать, однако необходимо дать объекты, которые Вы хотите сбросить.
, Например
dataContext.Refresh(RefreshMode.OverwriteCurrentValues, someObject);
Вы можете использовать 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 (). Это разрешит вашу проблему со вкладыванием вставки и удаления.
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() отменяет обновления, но не удаляет и вставляет.