Automatické generování change scriptů

Václav Dajbych       12.02.2011       SQL, Entity Framework, .NET       11374 zobrazení

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.

auto-generate-change-scripts

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.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Mohlo by vás také zajímat

Genericita, rozhraní a dědičnost

Jazyk C# je multiparadigmatický, což v praxi znamená, že v něm můžeme dělat hodně věcí. Jak ale do sebe jednotlivá paradigma zapadají? Co se hezky doplňuje a co není vzájemně kompatibilní? V tomto článku chci popsat, jak se chová IEquatable vzhledem k dědičnosti typu T.

ASP MVC - from zero to hero (2), světlo na konci tunelu

Jeden antipattern, který dokáže asynchronní programování pořádně znepříjemnit

 

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback