27
votes

I am trying to generate sql script that will create a database for me. So far I tried this:

Update-Database -Script -SourceMigration: $InitialDatabase
Update-Database -Script -SourceMigration:0

But both of those are giving me scripts that are beggining from first migration to last. And there is no initial state of database, which should include creation of the database itself, and single table that was there when I added migrations to my project.

So how do I recreate my model now, when migrations aren't giving me full sql script?

1
As I understand it, there should always be an initial state. Couple questions; Is it possible that you may have removed a migration file by error? If not, then what errors does the migrations utility give you when updating a database without using -script? The creation of the database usually doesn't appear in the migrations as the name is dependent on the connection string, although migrations utilities often do create databases as necessary using that information. What does your script contain then? Everything except the first table you mentioned?tne

1 Answers

51
votes

Try:

Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration: [MigrationName]

That should include the script from the initial database to the migration targeted. At the very least should have the "MigrationHistory" table.

You can also try recreating your migrations by:

1) Reverting back to the initial database. If everything goes well, this should remove all the tables from your database.

Update-Database -TargetMigration: $InitialDatabase

2) Delete all your migration file inside the Migrations folder. You don't have to delete the configuration class file.

3) Add a new migration. However, this would create a migration file from the initial database to your latest model.

Add-Migration -Name: [MigrationName]

Hopefully this helps. I also suggest looking at this blog post. Take note of tip #5 which is "Never delete a Migration before backing it out (Down)". In my experience this causes issues with migration if not followed.