
EF Core Migration Bundles
are standalone executable files that contain one or more Entity Framework Core
migrations and can be applied directly to a database. They are particularly useful for deploying migrations independently of the source code or development environment, e.g. in production environments.
Using migration bundles simplifies the deployment process as no additional software or configuration is required to perform the migrations. In CI/CD systems like Azure DevOps
in particular, they can be executed across all platforms on all operating systems and therefore offer a flexible alternative to DACPAC deployments
, which are often dependent on Windows tooling.
The inadequate documentation
A very big disadvantage of EF Migration Bundles is the documentation. Even for years there has been virtually no documentation or working examples - so you have to try out a lot. This is also the case here.
The command timeout
If a migration takes longer than 30 seconds - which is the standard - this is acknowledged by an exception during deployment. In the case of MSSQL, this looks like this:
Microsoft.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Unfortunately, the exact timeout is not specified here - but it is the command timeout . The error message in conjunction with MySQL is slightly better here.
MySql.Data.MySqlClient.MySqlException (0x80004005): The Command Timeout expired before the operation completed.
The best way to increase the command timeout is directly via the connection string; in the case of MSSQL via Command Timeout=xyz, where xyz is a number representing the seconds.
Together with Azure DevOps Pipeline YAML , a complete example with 600 seconds timeout (10 minutes) looks like this:
1- task: AzureCLI@2
2 displayName: Azure SQL Schema Deployment
3 inputs:
4 azureSubscription: ${{ parameters.azureConnectionName }}
5 scriptType: pscore
6 scriptLocation: inlineScript
7 inlineScript: |
8 chmod +x ${{ variables.STAGE_SQL_BUNDLE_PATH}}/my-linux-bundle
9 ${{ variables.STAGE_SQL_BUNDLE_PATH}}/my-linux-bundle `
10 --connection 'Server=${{ variables.STAGE_SQL_SERVER }};Database=${{ variables.STAGE_SQL_DBNAME }};Authentication=Active Directory Default;Command Timeout=600'Related articles

- 5 min read
Advanced Usage of MSSQL Indexed Views in EF Core
In the world of Microsoft SQL Server , views are a powerful tool for simplifying complex data queries. Simple views offer no real …

- 2 min read
New Data Annotation attributes with .NET 8
With .NET 8, the System.ComponentModel.DataAnnotations Namespace has been revised and some new attributes have been added that have been …

- 7 min read
The well-structured Entity in EF Core
A database entity represents an identifiable entry, often also things from the real world, which are to be stored and managed in the …
Let's Work Together
Looking for an experienced Platform Architect or Engineer for your next project? Whether it's cloud migration, platform modernization or building new solutions from scratch - I'm here to help you succeed.
