假设我们有一堆InsertOnSubmit
针对给定DataContext
. 如果SubmitChanges
调用成功,有没有办法自动生成一个 SQL 命令列表(甚至 LINQ2SQL 语句),可以撤消以后提交的所有内容?这就像执行回滚,即使一切都按预期工作。
注意:目标数据库将是 Oracle 或 SQL Server,因此如果两个数据库都有特定的功能可以实现这一点,我也很乐意使用它。
澄清: 我不希望“回滚”在插入成功完成后自动发生。我希望能够在原始程序完成插入数据后最多 24 小时(例如)通过 DELETE(或其他方式)“撤消”INSERT 语句。我们可以忽略任何可能出现的参照完整性问题。
假设表 A 有两列:(Id
自动生成的唯一 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
。或者使用一些可以让我捕获事务并稍后执行回滚的功能。
我们不能只是将数据库“重置”到某个时间点,因为其他不是由我们的程序发起的更改可能已经发生了。