Как обновить схемы таблиц базы данных с помощью схемы NHibernate? - PullRequest
53 голосов
/ 14 декабря 2008

Я пытаюсь выяснить, как использовать конфигурацию NHibernate с отображением для обновления схем таблиц, а не отбрасывать и воссоздавать их.

В настоящее время я использую NHibernate.Tool.hbm2ddl.SchemaExport obj с FluentNHibernate для генерации схемы базы данных для базы данных mysql. Хотя я не могу сказать, что это огромная проблема, всякий раз, когда я вызываю SchemaExport.Execute для базы данных, она отбрасывает все таблицы и затем воссоздает их.

Что было бы намного круче, если бы я мог просто обновить существующие структуры таблиц, сохраняя данные там, где это возможно. Но я действительно не хочу использовать коммерческий продукт или генератор кода, потому что мне не нравится генерация кода в целом, и мне не нужно этого достаточно, чтобы я подумал о том, чтобы заплатить за него. Поэтому, надеюсь, любой ответ будет иметь в виду эти предостережения.

1 Ответ

65 голосов
/ 02 марта 2009

Объект SchemaUpdate обеспечивает обновление схемы базы данных, по-видимому, генерируя и выполняя серию SQL UPDATE операторов (а также операторов ограничения), когда он void Execute(bool script, bool doUpdate) функция называется. Класс SchemaUpdate находится в пространстве имен NHibernate.Tool.hbm2ddl, которое можно найти в файле Nhibernate.dll.

SchemaUpdate упоминается в главе 15 руководства по набору инструментов nhibernate 1.0.2, здесь (раздел 15.1.5).

В «FAQ по NHibernate» (ссылка истекла) более полный пример использования 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);
}
...