При использовании NHibernate какие распространенные методы используются для распространения изменений схемы? - PullRequest
3 голосов
/ 02 ноября 2010

При использовании ORM NHibernate, каковы стандартные или лучшие методы с открытым исходным кодом для распространения изменений схемы для пользователей приложений, у которых есть существующая версия программного обеспечения?

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

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

(я предполагаю, что буду использовать NHibernate длясоздайте схему для базы данных, но если есть различные методы, которые устраняют эту проблему, тогда я открыт для ответа).

1 Ответ

1 голос
/ 21 февраля 2011

Подобно тому, как вы используете контроль версий для исходного кода, вы должны использовать контроль версий для схемы базы данных, особенно если вы собираетесь предоставлять функциональность обновления для вашего приложения. Есть некоторые инструменты, которые могут вам помочь, но я предпочитаю делать что-то вручную, используя XML-файл с командами SQL, чтобы обновить ревизию или версию схемы, что-то вроде этого:

 <Revision Id="3">
    <Up>
      <SqlCommand>CREATE TABLE [Category] ( [Id] BigInt Primary Key,    [Name] nvarchar(255) )</SqlCommand>
      <SqlCommand>ALTER TABLE [Group] ADD   CanRead bigint NULL</SqlCommand>
      <SqlCommand>UPDATE [SysValue] SET [Value] = '3' WHERE [Name] = 'Revision'</SqlCommand>
    </Up>
    <Down>
        <SqlCommand>DELETE TABLE [Category]</SqlCommand>
        <SqlCommand>ALTER TABLE [Group] DROP COLUMN [CanRead]</SqlCommand>
        <SqlCommand>UPDATE [SysValue] SET [Value] = '2' WHERE [Name] = 'Revision'</SqlCommand>
    </Down>
  </Revision>

Хорошо, что если вы правильно пишете команды SQL, вы можете изменять схему без потери данных, вы можете писать сложные запросы, копировать данные во временную таблицу, затем резко изменять эту таблицу и копировать данные обратно, конвертировать данные и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...