Pseudocode:
Code:
try
{
foreach (IRevertableScript script in scripts)
{
ExecuteScript(script.SetupScript);
revertable.Add(script);
}
catch
{
foreach (IRevertableScript scriptToUndo in revertable)
{
ExecuteScript(script.TeardownScript);
}
}
Anstatt also einfach strings auszuführen, erstellst Du also pro 'Script' ein Objekt, bestehend aus zwei Skripten: Ein 'SetupScript' und ein 'TeardownScript', wobei das TeardownScript quasi die Umkehrfunktion des 'SetupScript' ist.
Also: Create Table => Drop Table etc.
Vermutlich muss man die Teardowns in umgekehrter Reihenfolge ausführen. Für einfache Sachen geht das und viele
DB-Migratoren machen das auch so (z.B. der von EF)
Das Konzept an sich ist ja sprachenunabhängig.