Migration Procedures Advice Manual 35mm
I'm using EF 6.0 for my project in C# with manual migrations and updates. I have about 5 migrations on the database, but I realised that the last migration was bad and I don't want it. I know that I can rollback to a previous migration, but when I add a new (fixed) migration and run Update-Database, even the bad migration is applied.I was trying to rollback to the previous migration and delete the file with bad migration. But then, when I try to add new migration, I get error when updating database, because the migration file is corrupted (more specifically, first line of code rename the table A to B and is next lines, EF is trying to update table with name A - maybe it is some EF bug).Is there some query I can run, which would tell EF something like 'Forget last migration like it never existed, it was bad'? Something like Remove-Migration.Edit1I found solution suited for me.
Changing model to the good state and run Add-Migration TheBadMigration -Force. This will re-scaffold the last, not applied migration.Anyway, this still not answer the original question completely. If I UpdateDatabase to the bad migration, I did not found good way how to rollback and create new migration, excluding the bad one.Thanks. You have 2 options:.You can take the Down from the bad migration and put it in a new migration (you will also need to make the subsequent changes to the model).
This is effectively rolling up to a better version.I use this option on things that have gone to multiple environments.The other option is to actually run Update-Database –TargetMigration: TheLastGoodMigration against your deployed database and then delete the migration from your solution. This is kinda the hulk smash alternative and requires this to be performed against any database deployed with the bad version.Note: to rescaffold the migration you can use Add-Migration existingname -Force.
Procedures And Advice Manual
This will however overwrite your existing migration, so be sure to do this only if you have removed the existing migration from the database. This does the same thing as deleting the existing migration file and running add-migrationI use this option while developing. As the question indicates this applies to a migration in a development type environment that has not yet been released.This issue can be solved in these steps: restore your database to the last good migration, delete the bad migration from your Entity Framework project, generate a new migration and apply it to the database. Note: Judging from the comments these exact commands may no longer be applicable if you are using EF Core.Step 1: Restore to a previous migrationIf you haven't yet applied your migration you can skip this part.
Visa Online Australia
To restore your database schema to a previous point issue the Update-Database command with -TargetMigration option specify the last good migration: Update-Database –TargetMigration: To get the name of the last good migration use the 'Get-Migrations' command to retrieve a list of the migration names that have been applied to your database. PM Get-MigrationsRetrieving migrations that have been applied to the target database.03096BadMigration42590TheMigrationappliedbeforeit40252AndanotherThis list shows the most recent applied migrations first. Pick the migration that occurs in the list after the one you want to downgrade to, ie the one applied before the one you want to downgrade. Now issue an Update-Database. Update-Database –TargetMigration: 'All migrations applied after the one specified will be down-graded in order starting with the latest migration applied first.Step 2: Delete your migration from the projectYou now can delete the bad migration from your EF project 'Migrations' folder. At this point, you are free to create a new migration and apply it to the database.Step 3: Add your new migration add-migration 'new migration'Step 4: Apply your migration to the database update-database. For those using EF Core with ASP.NET Core v1.0.0 I had a similar problem and used the following commands to correct it (@DavidSopko's post pointed me in the right direction, but the details are slightly different for EF Core): Update-Database Remove-MigrationFor example, in my current development the command became PM Update-Database CreateInitialDatabaseDone.PM Remove-MigrationDone.PMThe Remove-Migration will remove the last migration you applied.
If you have a more complex scenario with multiple migrations to remove (I only had 2, the initial and the bad one), I suggest you test the steps in a dummy project.There doesn't currently appear to be a Get-Migrations command in EF Core (v1.0.0) so you must look in your migrations folder and be familiar with what you have done. However, there is a nice help command: PM get-help entityframeworkRefreshing dastabase in VS2015 SQL Server Object Explorer, all of my data was preserved and the migration that I wanted to revert was gone:)Initially I tried Remove-Migration by itself and found the error command confusing:System.InvalidOperationException: The migration '.' Has already beenapplied to the database. Unapply it and try again. If the migrationhas been applied to other databases, consider reverting its changesusing a new migration.There are already suggestions on improving this wording, but I'd like the error to say something like this:Run Update-Database (last good migration name) to revert the database schema back to to that state.
This command willunapply all migrations that occurred after the migration specified toUpdate-Database. You may then run Remove-Migration (migration name to remove)Output from the EF Core help command follows: PM get-help entityframework/-/. ) / // / /TOPICaboutEntityFrameworkCoreSHORT DESCRIPTIONProvides information about Entity Framework Core commands.LONG DESCRIPTIONThis topic describes the Entity Framework Core commands. For EF 6 here's a one-liner if you're re-scaffolding a lot in development. Just update the vars and then keep using the up arrow in package manager console to rinse and repeat. $lastGoodTarget = 'OldTargetName'; $newTarget = 'NewTargetName'; Update-Database -TargetMigration '$lastGoodTarget' -Verbose; Add-Migration '$newTarget' -Verbose -ForceWhy is this necessary you ask?
Not sure which versions of EF6 this applies but if your new migration target has already been applied then using '-Force' to re-scaffold in Add-Migration will not actually re-scaffold, but instead make a new file (this is a good thing though because you wouldn't want to lose your 'Down'). The above snippet does the 'Down' first if necessary then -Force works properly to re-scaffold.