Давайте предположим, что у нас есть набор операторов LINQ2SQL InsertOnSubmit
для данного DataContext
.Если вызов SubmitChanges
успешен, есть ли способ автоматически сгенерировать список команд SQL (или даже операторов LINQ2SQL), которые могут отменить всего, что было отправлено позднее?Это все равно, что выполнить откат, даже если все работает должным образом.
Примечание: целевая база данных будет либо Oracle, либо SQL Server, поэтому, если для обеих баз данных предусмотрены определенные функции, которые будут выполнены, я радиспользуйте это также.
Уточнение: Я не хочу, чтобы "откат" происходил автоматически, как только вставки успешно завершены.Я хочу иметь возможность «отменять» операторы INSERT через DELETE (или каким-либо другим способом) в течение 24 часов (например) после того, как исходная программа закончила вставку данных.Мы можем игнорировать любые возможные проблемы ссылочной целостности, которые могут возникнуть.
Предположим, что таблица A состоит из двух столбцов: Id
(автоматически сгенерированный уникальный идентификатор) и Value
(строка)
ЕслиКод LINQ2SQL выполняет две вставки
INSERT INTO Table A VALUES('a') // Creates new row with Id = 1
INSERT INTO Table A VALUES('z') // Creates new row with Id = 2
<< time passes>>
В какой-то момент позже я хотел бы иметь возможность отменить это, выполнив
DELETE FROM A Where Id = 1
DELETE FROM A Where Id = 2
или что-то подобное.Я хочу иметь возможность генерировать операторы DELETE
, соответствующие операторам INSERT
.Или используйте некоторые функции, которые позволили бы мне захватить транзакцию и выполнить откат позже.
Мы не можем просто «сбросить базу данных» до определенного момента времени, так как могли произойти другие изменения, не инициированные нашей программой.с тех пор.