GDR - развертывание нескольких целей базы данных с одним проектом

Я использую Visual Studio Team System 2008 с GDR версии 9.1.40413.00 и пытаюсь решить проблему развертывания одного проекта БД в нескольких базах данных. Например, если у меня есть проект Performance.DB, я бы хотел развернуть базы данных, называемые Performance, Performance2, Performance3 и т. Д.

Однако, если вы перейдете к свойствам проекта db, у вас может быть только одна цель развертывания. Есть ли способ обойти это? Я также хотел бы, чтобы каждая база данных Performance имела свой собственный файл sqlcmdvars, чтобы у него были свои уникальные файлы mdf и ldf.

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

"D:\Program Files\Microsoft Visual Studio 9.0\VSTSDB\Deploy\vsdbcmd.exe" /ManifestFile:"D:\Performance\Test\Binaries\Release\Performance.DB.deploymanifest" /a:Deploy /cs:"Data Source=.\SQLEXPRESS;Integrated Security=True;Pooling=False" /p:GenerateDropsIfNotInProject=True /p:BlockIncrementalDeploymentIfDataLoss=False /p:TargetDatabase=Performance /p:SqlCommandVariablesFile="D:\Performance\Test\Binaries\Release\Performance.sqlcmdvars" /p:IgnorePermissions=True /p:GenerateDeployStateChecks=False /dd:+

3 ответа

После некоторого взлома MSBUILD в файле *.dbproj я придумал проект, который просто вызывает второй /n раз в событии AfterDeploy, так что вы можете использовать одну команду "Deploy" для развертывания в нескольких базах данных:

 <PropertyGroup>
    <TargetDatabase>Performance</TargetDatabase>
    <TargetDatabase Condition="$(SecondDatabase)!=''">$(SecondDatabase)</TargetDatabase>
  </PropertyGroup>


 <Target Name="AfterDeploy">
    <MSBuild Condition="$(SecondDatabase)==''" Targets="Deploy" Properties="SecondDatabase=Performance2" Projects="$(ProjectPath)" />
    <MSBuild Condition="$(SecondDatabase)==''" Targets="Deploy" Properties="SecondDatabase=Performance3" Projects="$(ProjectPath)" />
  </Target>

Вы можете попробовать и посмотреть на частичные проекты базы данных.

Вот пример http://blogs.msdn.com/gertd/archive/2008/10/05/partial-projects.aspx.

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

Используя это, ваш основной проект базы данных Perfomance будет "базовым" проектом, и все остальные будут извлечены из этого.

Недавно я столкнулся с подобной ситуацией, когда мне захотелось создать один проект базы данных с набором "базовых" объектов, которые будут развернуты в нескольких "дочерних" базах данных. Чтобы решить эту проблему, наша команда разработала составные проекты (http://msdn.microsoft.com/en-us/library/dd193415.aspx), чтобы определить наши базовые и дочерние базы данных, а затем настроить несколько конфигураций сборки. Каждая конфигурация сборки позволяет вам указать свою цель, sqlcmdvars и т. Д. И, в основном, настроить сборку для развертывания только для одной базы данных за раз.

Это означает, что для развертывания всех ваших баз данных Performance вам потребуется изменить конфигурации сборки для каждой или, если вы развертываете / модульное тестирование в TFS, создать несколько файлов параметров тестирования с различными файлами.config для каждой имеющейся конфигурации сборки.

Другие вопросы по тегам