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.