特定の に対して一連の LINQ2SQLInsertOnSubmitステートメントがあるとしDataContextます。呼び出しが成功した場合、後で送信されたすべてを元に戻すSubmitChangesことができる SQL コマンド (または LINQ2SQL ステートメント) のリストを自動的に生成する方法はありますか? すべてが期待どおりに機能したにもかかわらず、ロールバックを実行するようなものです。
注: 宛先データベースは Oracle または SQL Server のいずれかになります。そのため、両方のデータベースにこれを実現する特定の機能があれば、それも喜んで使用します。
明確化: 挿入が正常に完了するとすぐに「ロールバック」が自動的に行われることは望ましくありません。元のプログラムがデータの挿入を終了してから 24 時間後まで (たとえば)、DELETE (またはその他の手段) を介して INSERT ステートメントを「元に戻す」機能が必要です。発生する可能性のある参照整合性の問題は無視できます。
Id(自動生成された一意の ID) とValue(文字列)の 2 つの列を持つテーブル A を想定します。
LINQ2SQL コードが 2 つの挿入を実行する場合
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。または、トランザクションをキャプチャして後でロールバックを実行できる機能を使用します。
プログラムによって開始されなかった他の変更がそれ以降に発生した可能性があるため、特定の時点に「データベースをリセット」することはできません。