Automatické generování change scriptů

Václav Dajbych       12. 2. 2011       SQL, Entity Framework, .NET       6849 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

Poraďte nám, co s úvodní stránkou

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.

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