Jak zaktualizować Schematy tabeli bazy danych za pomocą NHibernate schema generation?

Próbuję dowiedzieć się, jak używać konfiguracji NHibernate z mapowaniem do aktualizacji schematów tabel, zamiast ich upuszczania i odtwarzania.

Obecnie używam NHibernate.Tool.hbm2ddl.SchemaExport obj z FluentNHibernate do generowania schematu bazy danych dla bazy danych mysql. Chociaż nie mogę powiedzieć, że jest to ogromny problem, za każdym razem, gdy wywołuję SchemaExport.Execute w bazie danych, to zrzuci wszystkie tabele, a następnie odtworzy je.

Co byłoby fajniejsze, gdybym tylko mógł to zaktualizować istniejące struktury tabel, w miarę możliwości zachowujące dane. Ale tak naprawdę nie chcę używać produktu komercyjnego lub generatora kodu, ponieważ nie lubię generowania kodu w ogóle, i nie potrzebuję tego na tyle, że rozważyłbym zapłacenie za to. Więc mam nadzieję, że każda odpowiedź będzie pamiętać o tych zastrzeżeniach.

Author: Mark Rogers, 2008-12-14

1 answers

Obiekt SchemaUpdate zapewnia aktualizację schematu bazy danych, pozornie generując i wykonując serię instrukcji SQL UPDATE (jak również instrukcji constraint), gdy jest to void Execute(bool script, bool doUpdate) funkcja jest wywoływana. Klasa SchemaUpdate znajduje się w przestrzeni nazw NHibernate.Tool.hbm2ddl, którą można znaleźć w Nhibernate.plik dll.

SchemaUpdate jest wspomniana w rozdziale 15 przewodnika po zestawie narzędzi nhibernate 1.0.2, tutaj (sekcja 15.1.5).

"NHibernate FAQ" had (link teraz wygasł) pełniejszy przykład użycia SchemaUpdate:

[Test]
public void Update_an_existing_database_schema()
{
    _cfg = new Configuration();
    _cfg.Configure();
    _cfg.AddAssembly(Assembly.LoadFrom("DataLayer.dll"));
    var update = new SchemaUpdate(_cfg);
    update.Execute(true, false);
}
 67
Author: Mark Rogers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-30 13:37:34