2013-05-30 4 views
10

Может ли кто-нибудь объяснить концепцию Migrators (в частности, fluentmigrator)?Объяснение Миграторов (FluentMigrator)?

Вот (возможно, запутанные) факты Ive почерпнутые по теме:

  • ли способ сначала создать затем сохранить обновления для базы данных путем контроля версий.

  • Первая миграция (или начальная версия базы данных ) будет содержать все таблицы, отношения и свойства требуется (сделано либо свободно или использовать кусок SQL в сценарии).

  • Если вы хотите нажать на изменение базы данных, вы должны создать новый способ миграции (вверх и вниз), что-то вроде добавления новой таблицы или изменения поля.

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

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

Я знаю, что с nHibernate/fluent вы можете легко создавать таблицы для базы данных без необходимости определять что-либо, кроме моделей и файлов карт. Есть ли способ сделать эту конфигурацию совместимой с Migrator/Versioning?

Когда nhibernate/fluent отвечает за создание базы данных, мне не обязательно определять каждый аспект таблиц. Это делается либо через соглашение, либо через файлы сопоставления. С мигрантами мне нужно будет определить этот уровень детализации?

ответ

19

Много вопросов здесь. Я отвечу на вопросы с акцентом на FluentMigrator.

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

FluentMigrator - это способ контроля версий вашей схемы базы данных. Все делают это в некотором роде. Или вручную, с sql-скриптами, с помощью инструмента, такого как SqlCompare или проекта Visual Studio Database. Все эти методы легко испортить. Так легко ошибиться при выпуске новой версии и сбое системы. Миграции - лучший способ справиться с этим.

FluentMigrator позволяет вам определить изменение схемы как кода, и обычно это проверяется в исходном элементе с другими изменениями кода. Это означает, что вы можете сказать, что версия 1.XX вашей системы должна иметь версию 123 базы данных. Это означает, что если вы откатите свой код в предыдущей версии, вы также знаете, какую версию базы данных также откатить.

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

A Migration - это способ описания изменения схемы базы данных.FluentMigrator создает таблицу VersionInfo и сохраняет уникальный идентификатор (номер версии) Migration после того, как был применен.

Например, если у меня есть два Migrations с Id 1 и один с Id 2. Если тогда я выполняю первую миграцию, тогда Id 1 будет сохранен в таблице VersionInfo, и я могу посмотреть там и узнать, что версия база данных - 1, а версия 2 еще не применена.

Возможность узнать, какая версия схемы базы данных очень полезна при нажатии на изменения от Test to Production или при наличии нескольких копий базы данных в Production. Например, у меня есть клиент с офисами по всему миру, и у каждого офиса есть своя копия базы данных, и все они находятся на разных версиях. Без знания версии базы данных было бы очень сложно их безопасно обновить.

В большинстве случаев мне не нужно действительно смотреть в таблице VersionInfo, FluentMigrator обрабатывает это автоматически. Он сравнивает сборку с Migrations с таблицей VersionInfo и показывает, какие изменения еще не были применены, а затем выполняет их.

Первая миграция (или начальная версия базы данных) будет содержать все таблицы, отношения и свойства, необходимые (сделано либо свободно или использовать кусок SQL в сценарии).

Начальная точка зависит от вас. У вас может быть первая миграция, которая представляет собой SQL-скрипт, который вы создали из текущей базы данных. Вы могли бы также использовать один из проектов Contrib, например , для создания Fluent Migration. Или вы могли бы просто решить, что существующая база данных является отправной точкой и сохраните ее копию, чтобы восстановить ее как версию 1.

Я представил FluentMigrator для многих устаревших баз данных без каких-либо серьезных проблем.

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

Да, Up используется для применения изменения, указанного в переменах и перемещениях вниз. Таким образом, Up мог бы создать таблицу, а Down можно было бы отбросить таблицу.

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

Для выполнения миграции доступны три runners. Бегун командной строки, задача Nant и задача MSBuild. Обычно выполняются как часть скрипта сборки.

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

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

Я в основном ответил на это уже. Обычно легко создать скрипт sql для базы данных. Для сервера Sql требуется меньше минуты, чтобы сгенерировать сценарий даже для больших баз данных. Этот скрипт может быть сохранен в файле .sql и выполнен в качестве первой миграции с использованием выражения Execute.EmbeddedSqlScript. Это работает.

Я знаю, что с NHibernate/свободно вы можете легко создавать таблицы для базы данных без определения ничего, кроме моделей и файлов карты. Есть ли способ сделать эту конфигурацию совместимой с Migrator/Versioning?

На данный момент такой интеграции нет, и на практике я, по крайней мере, не пропущу его. Было некоторое обсуждение о подключении Fluent NHibernate и FluentMigrator, но это было бы много работы. Это позволит создавать строительные леса для моделирования, например, EF Code First migrations. В настоящий момент это не относится к дорожной карте.

Когда NHibernate/свободно отвечает за генерацию базы данных, я не обязательно нужно определить каждую вещь аспект таблиц. Его сделано либо через соглашение, либо через файлы сопоставления. С митраторами I необходимо определить этот уровень детализации?

Да, вам нужно будет определить на этом уровне детализации. Миграции FluentMigrators - это DSL (собственный язык) для определения изменений схемы, которые переводится на sql. Вы также можете написать sql, используя выражение Execute.Sql. Переходы Entity Frameworks имеют такую ​​интеграцию, которая имеет как преимущества, так и недостатки.

Отъезд wiki или один из учебников here, here (часть 1) или here (часть 2) для получения дополнительной помощи по началу работы.

 Смежные вопросы

  • Нет связанных вопросов^_^