Я ищу структуру переноса, которая будет работать с существующим проектом, который использует .NetTiers, более старый ORM, который требует, чтобы CodeSmith генерировал код доступа к данным.
У нас есть опыт круглого стола, и у нас есть успех в его использовании. Мы также можем автоматически развертывать изменения схемы при запуске развертываний из Octopus Deploy. Довольно легко, поскольку это всего лишь коллекция SQL-скриптов.
Мне было интересно перейти на FluentMigrator. Мне нравится FM DSL, и я нашел этот SO-вопрос весьма полезным, однако есть несколько вещей, которые я не задираю:
- Каков правильный способ импорта существующей схемы базы данных [*]?
- Каков правильный способ развертывания миграции в производственной среде [**]?
[*] Мое предположение заключается в том, что я генерирую единственный script с использованием инструментов SQL Server и использую ExecuteEmbeddedSql в качестве начальной миграции. Это правильно?
[**] Существует три основных способа запуска миграции (Command Line, NAnt runner, runner MSBuild). Им потребуется доступ к базе данных, чтобы они могли работать. Представьте, что мы хотим развернуть это в среде PROD. Разработчики и сервер сборки не имеют доступа к этой среде. Как вы запускаете эти бегуны против этой среды?
Наш обычный процесс развертывания - создать сборник SQL-скриптов, которые необходимо развернуть как часть развертывания. Ops запускает их как часть развертывания либо автоматически как часть процесса Octopus Deploy (powershell), либо запускается вручную, если развертывание находится вне Octopus).
Одним из осложнений, которые мы имеем в этом конкретном проекте, является .NetTiers. Это означает, что мы должны запускать генерацию кода CodeSmith с использованием .NetTiers для создания уровня доступа к данным, прежде чем мы сможем кодировать эти объекты и службы данных. Поэтому наш рабочий процесс должен быть:
- Запись миграции
- Запустите миграцию для обновления базы данных (укажите конкретную базу данных .NetTiers)
- Запустите .NetTiers против конкретной базы данных .NetTiers(центральный сервер сборки)
- Код против новых .NetTiers сгенерированных объектов, полей db и т.д.
Мне бы хотелось сбросить .NetTiers, но рефакторинг, к сожалению, в настоящее время не является жизнеспособным вариантом.