Как обновить схемы таблиц базы данных с помощью генерации схемы NHibernate?

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

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

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


person Mark Rogers    schedule 14.12.2008    source источник
comment
Ознакомьтесь с SchemaUpdate.   -  person Mauricio Scheffer    schedule 14.12.2008


Ответы (1)


Объект 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);
}
person Community    schedule 02.03.2009
comment
мы не можем изменить настройку поля после создания, например, изменить длину строки с nvarchar (255) на nvarchar (45), не так ли? - person c.sokun; 31.08.2009
comment
Это хороший вопрос, версия для создания hbm2ddl позволяет это сделать, но я заметил, что иногда мне приходится отбрасывать таблицы, прежде чем создание будет выполнено успешно. - person Mark Rogers; 31.08.2009
comment
Это прекрасно работает, этот метод также подходит для Fluent NHibernate. - person Contango; 30.11.2011
comment
Я могу подтвердить, что, по крайней мере, на SQL Server (и, следовательно, в Azure) поля не обновляются, вам нужно делать это вручную. - person Astaar; 03.04.2013
comment
@Astaar: вы имеете в виду, что переход с nvarchar (255) на nvarchar (45) не работает? или вы имеете в виду, что обновление схемы вообще не работает? - person Algoman; 04.09.2013