Развертывание версий базы данных. Миграция Entity Framework против SSDT DacPacs

У меня есть приложение, ориентированное на данные с SQL Server. Среды, в которых оно будет развернуто, не находятся под нашим контролем, и там нет администраторов баз данных (все они являются малыми предприятиями), поэтому нам необходимо, чтобы процесс распространения каждого обновления приложения / базы данных был как можно более автоматическим.

Помимо обычных изменений между версиями приложения (иногда непредсказуемых), мы уже знаем, что нам нужно будет распространять некоторые новые начальные данные с каждой версией. Иногда эти начальные данные будут связаны с другими данными в нашей системе. Например: возможно, нам нужно будет вставить 2 новые строки некоторых основных данных во время процесса обновления v2-v3 и некоторые другие 5 строк во время процесса обновления v5-v6.

EF

Мы проверили миграцию базы данных Entity Framework (доступную для существующих баз данных без Code-First с версии 4.3.1), которая представляет традиционные последовательные сценарии в более автоматическом и контролируемом режиме (например, Fluent Migrations).

SSDT

С другой стороны, с другой философией мы проверили SSDT и его dacpac, снимки и сценарии до и после развертывания.

Вопросы:

  1. Какая из этих технологий / философий больше подходит для описанного случая?

  2. Любая другая технология / философия, которая могла бы использоваться?

  3. Любой другой совет?

Заранее спасибо.

2 ответа

Это интересный вопрос. Здесь, в Red Gate, мы надеемся решить эту проблему позже в этом году, так как у нас много клиентов, спрашивающих, как мы могли бы предоставить простой пакет развертывания. У нас есть SQL Packager, который по сути оборачивает SQL-скрипт в исполняемый файл.

Я бы сказал, что dacpacs разработаны для того случая, который вы описываете. Однако, насколько я понимаю, они работают, генерируя сценарий развертывания динамически применительно к цели. Недостатком является то, что у вас не будет теплого нечеткого чувства, которое вы можете получить при развертывании предварительно протестированного сценария SQL.

Я не пробовал обновлять данные с помощью dacpacs, поэтому мне было бы интересно узнать, насколько хорошо это работает. Насколько я помню, он усекает целевые таблицы и заполняет их.

У меня нет опыта работы с миграциями EF, поэтому мне было бы интересно прочитать ответы на эту тему.

Мы, вероятно, примем гибридное решение. Мы не хотели бы отказываться от идейных разработчиков пакетов, но, с другой стороны, из-за природы наших приложений (малые предприятия как конечные пользователи, нет администраторов баз данных, нет обязательств по обновлению, так что несколько "живых" версий баз данных сосуществуют), мы не можем отказаться от полного контроля над процессом миграции, включая схему и данные. В нашем случае сценарии до и после развертывания могут оказаться недостаточными (или, по крайней мере, недостаточно удобными) для полной миграции, как это делают EF Migrations. Такие изменения, как добавление / удаление начальных данных, изменение отношения "один ко многим" или "многие ко многим" или даже радикальные изменения схемы базы данных (и, следовательно, перенос данных в эту схему из любой ранее выпущенной схемы), могут быть частью нашей работы. дневник работает, когда наша первая версия выпущена.

Таким образом, мы, вероятно, будем использовать миграцию EF с системой "Вверх" и "Вниз" для каждого выпуска версии. В принципе, каждый "Вверх" вызывает dacpac с последним снимком базы данных (и каждый "Вниз" - свой предыдущий), каждый из которых имеет свои параметры развертывания для этой конкретной миграции. Миграции EF будут обрабатывать строку управления версиями, возможно, также некоторые сложные части миграции данных.

Мы чувствуем себя более уверенно в этом гибридном пути. Мы пропустили автоматизацию и обнаружение изменений схемы в Entity Framework Migrations так же, как мы пропустили управление линией контроля версий в Dacpacs.