January 28, 2021
Working with multiple environments can make it hard to keep databases in sync with code. Use a database project to make it managable.
To avoid one-off scripts or manual steps in deploying database schema changes, a database project can be helpful.
For code-first solutions, migrations are helpful for making sure your local database matches your code.
A manual schema-compare step keeps the database project in sync with your local database.
We then compile the database project to a format the Azure Pipelines understand, and automatically update DBs as part of deployments to keep data in sync.
If a database migration can't happen automatically, the deployment fails and is blocked.
Option a. Making DB updates (Code-first Migrations using .net core)
add-migration asfasdf
to create a migration to get your DB to match your local C# entitiesupdate-database
to update your DB.sql
files to match your local envor Option b. Making DB updates (DB-first using .net core)
.sql
files to match your local envCreate a database project in VS
Perform an initial schema compare - LocalToProject
or DevelopmentToProject
Check in your changes to git
Add a build step to your azure-pipelines.yml
file after your other build steps
yml1- task: VSBuild@12displayName: "Build database project"3inputs:4 solution: "**/ProjectName.Database.sqlproj"5 msbuildArgs: '/p:OutputPath="$(Build.ArtifactStagingDirectory)\drop-dacpac"'6 configuration: "$(BuildConfiguration)"
Add a deployment step to your release (before deploying your app)
Azure SQL Database deployment
Azure Resource Manager
$(AzureSubscription)
Connection String
$(ConnectionString)
$(System.DefaultWorkingDirectory)\**\*Database.dacpac
Further reading...