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

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

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

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

14.12.2008 04:28:27
Проверьте SchemaUpdate .
Mauricio Scheffer 14.12.2008 20:21:21
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).

«Часто задаваемые вопросы о 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);
}
67
30.08.2015 13:37:34
мы не можем изменить настройку поля после его создания, например, изменить длину строки с nvarchar (255) на nvarchar (45), не так ли?
c.sokun 31.08.2009 10:43:16
Это хороший вопрос, создание версии hbm2ddl позволит вам сделать это, но я заметил, что иногда мне приходится отбрасывать таблицы, прежде чем создание будет успешно выполнено.
Mark Rogers 31.08.2009 13:54:01
Это прекрасно работает, эта техника также подходит для Fluent NHibernate.
Contango 29.11.2011 23:28:10
Я могу подтвердить, что по крайней мере на SQL Server (и, следовательно, на Azure) поля не обновляются, вы должны сделать это вручную.
Astaar 3.04.2013 08:04:59
@Astaar: вы имеете в виду, что переход с nvarchar (255) на nvarchar (45) не работает? или вы имеете в виду, что обновление схемы вообще не работает?
Algoman 4.09.2013 14:20:28