Following Microsoft's instructions on Using a Separate Migrations Project, I have build a solution model that looks something like the following:
\
+-- Application.csproj
+-- ProjectContainingDbContext.csproj
+-- MigrationProject.SqlServer.csproj
+-- MigrationProject.Postgres.csproj
I'm using the following syntax to generate the content of the migration assemblies:
dotnet ef migrations add Initial --project MigrationProject.SqlServer.csproj
This step works fine. I'm not actually using the migration assembly but rather I need to generate the SQL as I'm using DbUp
to apply migrations in production. However, it doesn't appear script generation respects the --project
flag, i.e., the following appears to look in the same assembly as the DbContext
and therefore fails to generate the migration SQL:
dotnet ef migrations script --output path_for_sql_files --project MigrationProject.SqlServer.csproj
Can anyone suggest a workaround for this issue?
I'm using EF Core 9.0.2.
Related, the command dotnet ef migrations -has-pending-model-changes
also failed to respect the --project
argument (raised as feature request on GitHub as EF Core Issue 35637.)
So it turns out that this all works fine, if you build the migration assemblies prior to running either the dotnet ef migrations script
command or the dotnet ef has-pending-model-changes
command.
Probably obvious in retrospect, but wasn't to me and the documentation doesn't say anything about needing to build assemblies - remember that when you run the dotnet ef migrations add
command, it does a build of the assembly containing the DbContext before and after...
So, what you need in build pipeline is:
dotnet build MigrationProject.SqlServer.csproj
dotnet ef migrations script --output path_for_sql_files --project MigrationProject.SqlServer.csproj