Zarządzamy strukturą bazy danych

Do zarządzania zmianami w bazie danych korzystamy z projektu https://github.com/schambers/fluentmigrator/. Niezbędne operacje jak np dodanie, usunięcie, zmiana nazwy tabeli lub kolumny umieszczamy w projekcie adMoto.Migrate w katalogu Migrations

nazwa pliku oraz klasy powinna składać się z _YYYYMMDDHHmm_Name gdzie:

  • YYYY - rok
  • MM - miesiąc
  • DD - dzień
  • HH - godzina
  • mm - miesiąc
  • name - dowolna nazwa klasy

Klasa powinna być opatrzona atrybutem [Migration(YYYYMMDDHHmm)] jest to kolejny numer migracji do wykonania, oraz dziedziczyć po klasie Migration z pakietu "FluentMigrator". W klasie należy przeciążyć dwie metody Up oraz Down, Up wykorzystywana do wprowadzenia zmian do bazy danych, Down powinna wycofać zmiany wprowadzone w metodzie Up, przykład:

 using FluentMigrator;
 namespace adMoto.Migrate
 {
    [Migration(201107071547)]
    public class _201107071541_Test : Migration
    {
        // dodanie testowej kolumny do tabeli Customers
        public override void Up()
        {
            Create.Column("TestColumn").OnTable("Customers")
           .AsString(int.MaxValue)
           .Nullable();

        }
        // usunięcie testowej kolumny z tabeli Customers
        public override void Down()
        {
            Delete.Column("TestColumn").FromTable("Customers");   
        }
    }
 }

Uruchomienie migracji odbywa się automatycznie przy release projektu na domenę testową nh.test.truck.pl, na sandbox jeszcze nie. Wykonanie rollbacka polega na wywołaniu polecenia rake.net.exe db:rollback - cofa zmiany do ostatnio używanej wersji bazy (należy się upewnić czy rake.net posiada odpowiednią konfiguracje - test,sandbox, production) Wykonanie polecenia rake.net.exe db:rollback version - cofa zmiany do konkretnej wersji bazy danych. Używane wersje bazy danych są przechowywane w katalogu C:\temp\DataBaseVersionInfo?\ (konfiguracja lokalna i testowa)

Więcej informacji znajdziecie na wiki projektu: https://github.com/schambers/fluentmigrator/wiki oraz w artykułach społeczności https://github.com/schambers/fluentmigrator/wiki/Community-articles

Acha, niestety nadal należy utrzymywać mapowanie klasy na pliki xml dla NHibernate :)