Sqlproj: Which solution to deploy a database in command line?

Refresh

December 2018

Views

4.5k time

1

I am currently deploying a website to a server by using the Microsoft Web Deployment technologies (msbuild and msdeploy commands). The website requires the deployment of a database and both will be in the same server. I am searching the best solution to deploy a database project (with a command line) and I would like to understand better all the technologies around database deployment.

Content of the solution (Visual Studio 2013):

  • a database project (for SQL Server 2008),
  • a class library (Data access layer with NHibernate)
  • a web project (ASP.NET MVC4).

Note: I am not using voluntarily a continuous integration/delivery tool or publish method in VS. My first goal with this project was understanding how msbuild / msdeploy work...

I had a look at the vsdbcmd command which seems to do all the steps I want... except I would need to import Visual Studio DLLs/files into my remote server and I wonder if there is no better way... I also looked at the msdeploy providers dbSqlPackage/dbDacFx, but from what I understood, it is using a dacpac for applying the schema changes. Similarly, the SqlPackage.exe seems to use a dacpac as well.

Using a dacpac sounds a good idea, but I am confused with the following questions:

  • Does that mean that I would need a different process the first time my database is created? If yes, which command would be the best?
  • Is it possible to create a dacpac from my sqlproj file? If yes, how to do it?

Are there other ways of deploying from a command line and from your experiences and projects, what was the best way to deploy this kind of project?

Many thanks,

3 answers

7

При дальнейшем исследовании, я обнаружил, что Visual Studio было создание dacpac, когда он строит sqlproj (бен / Debug или bin / Release в зависимости от конфигурации сборки). Первый раз развертывания, то dacpac создать свою базу данных. Когда вы делаете изменения схемы, кажется, применить их.

Здесь сумма складывается из командной строки для веб-сайта и для базы данных:

Постройте сайт

msbuild %fullpathwebcsproj% /P:Configuration=Release /T:Package

Развертывание Веб - сайт (пул приложений по умолчанию)

msdeploy -verb:sync -source:package=%fullpathpackage% -dest:auto

% fullpathpackage% : путь файла почтового индекса , созданного MSBuild , когда / T: пакет есть (бен / Release)

строить базы данных:

msbuild %fullpathsqlproj% /P:Configuration=Release 

Развертывание базы данных:

msdeploy -verb:Sync -Source:dbDacFx=%fullpathdacpac% -Dest:dbDacFx=%connectionstring%

Это решение satifies меня сейчас. Тем не менее, я по-прежнему открыт для комментариев и предложений по улучшению.

0

ИТАК файл .sqlproj компилируются в dacpac файл, который является в основном ZipFile содержащим какими-либо предварительными / развертыванием файлов почтовых и файл XML с содержимым всех вашего SQL скриптов (модель).

При использовании MSBuild он использует API DacFx для сравнения и опубликовать изменения в dacpac в базу данных SQL.

Вы можете использовать MSBuild или вы можете использовать DacFx API самостоятельно или обычно люди используют sqlpackage.exe взять dacpac и сравнить с базой данных, он может либо создать сценарий, так что вы можете запустить его вручную или можно запустить скрипт, генерирующий для обновления базы данных.

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

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

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

0

Разработка базы данных в виде набора файлов с заплатами , которые зависят от друг друга , а затем использовать https://github.com/LuvDaSun/sqlpatch для развертывания.