Dajbych.net


Automatické generování change scriptů

, 1 minuta čtení

sql server 2008 logo

S rozvojem aplikace se rozvíjí i její databáze. Zatímco staré assembly jdou nahradit novými bez velkých potíží, se změnou databáze to tak snadné není. Její data se musí zachovat. V tom případě je nejsnazší spustit SQL skript, který databázi povýší do požadovaného stavu. Ten se může psát ručně, ovšem mnohem pohodlnější je využít možnosti SQL Server Management Studia a nechat si skripty vygenerovat automaticky. Nová tabulka se dá zpětně dogenerovat. Její úprava už však ne.

To se dá využít například k primitivní inicializační strategii Entity Frameworku, jejíž princip může vypadat nějak takto:

public class ChangeScripts<T> : IDatabaseInitializer<T> where T : DbContext {
    public void InitializeDatabase(T context) {
        var current = Decimal.Parse(File.ReadAllText("dbversion.config"));
        var files = from file in Directory.GetFiles("change scripts", "*.sql")
            let version = Decimal.Parse(Path.GetFileNameWithoutExtension(file))
            where version > current
            let script = File.ReadAllText(file)
            select new { version, script };
        foreach (var file in files)
            context.Database.SqlCommand(file.script);
        if (files.Count() > 0) {
            var latest = files.Max(f => f.version);
            File.WriteAllText("dbversion.config", latest.ToString());
        }
    }
}

V souboru je uložena verze databáze a v určité složce se ukládají change skripty, které mají svůj název shodný s číslem verze, na kterou databázi povýší. Když je potřeba databázi upravit, do dané složky se jen přidá change script. Inicializační třída si zjistí verzi databáze, a pokud najde SQL skript novější verze, databázi na tuto verzi povýší. Nakonec aktualizuje soubor s číslem verze databáze.