I have a local instance of a database that I recently created using
DbContext.Database.Create(), so the
__MigrationHistory table exists with an
InitalCreate entry that matches the code at the moment.
Some code-based migrations exist in the Migrations folder, however. These will be run in our development and staging environments to bring those databases in line with the code. I don’t need to apply them locally, however, since I created the database using the current code.
I now need to make a change to the model and create the corresponding migration. But when I run
Add-Migration TestMigration, I get the following error
Unable to generate an explicit migration because the following explicit migrations are pending: [201203271113060_AddTableX, 201203290856574_AlterColumnY] Apply the pending explicit migrations before attempting to generate a new explicit migration.
What should I do in this case? I can’t point the Add-Migration tool at another environment because it’s not guaranteed that version matches what I have locally. I want a migration that matches only the changes I’ve made.
It seems I have a few options but none are ideal:
- Delete the other migrations from the Migrations folder, run the Add-Migration command, upgrade the database, then restore the old migrations. This is simple but seems a bit hackish.
- Revert to the version of the model in source control that the first migration was applied to, then build this and use it to create the database. Then get the latest version, apply all the migrations, then I’m ready to add my migration. This seems like a lot of effort!
- Create the migration manually.
Does anyone have any suggestions about how to manage this?