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á sice zpětně dogenerovat, její úprava už však ne.
Tato funkcionalita jde snadno zapnout. Z hlavního menu se z nabídky Tools vybere položka Options. V dialogovém okně pak stačí zvolit položku Designers a zaškrtnout Auto generate change scripts. Při každém ukládání změn pak SQL Server Management Studio vygeneruje change skript a zeptá se, zdali si ho přejete uložit.
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.