If my model changes, how do I rebuild the database in EF?

.net c# entity-framework

Question

I created a DbContext like so :

   public class myDB : DbContext
   {
     public DbSet<Party> Parties { get; set; }
     public DbSet<Booking> Bookings { get; set; }
   }

This generated my DataBase and the two tables above..Great

I then decided to add another DbSet into the mix & I got an error:

the model backing the 'Party' context has changed since the database was created

I'm aware of the fixes for this using modelbuilder.IncludeMetadataInDatabase = false; and Database.SetInitializer<ClubmansGuideDB>(null);

1) What's the correct way to add my new classes to the context and have them generated in the DataBase?

2) In my futile attempts to solve this myself I deleted the tables and tried to re-run the app with no success I then deleted the full database and re-run and it doesn't re-generate the DB. How can I start from scratch - is there some cache somewhere?

1
5
1/9/2012 7:00:14 PM

Accepted Answer

I believe you're looking for:

Database.SetInitializer<ClubmansGuideDB>(new DropCreateDatabaseIfModelChanges<ClubmansGuideDB>());

As of EF 4.1 and above.

Note that this assumes you have permission to even drop your database. I do this locally for ease of development but disable it in staging/production (I do a manual Schema Compare and push my changes).

By the way, for testing, if you need to force recreate the database, you can do:

using (var context = new ClubmansGuideDB()) {
    context.Database.Initialize(force: true);
}

(using if you don't already have a reference to your DB)

15
1/9/2012 6:24:40 PM

Popular Answer

You can let the Entity Framework recreate the whole database by using a Database Initializer or if you want to migrate data you can look at the Code First Migrations

The following would recreate your database when the model changes:

Database.SetInitializer<myDB>(new DropCreateDatabaseIfModelChanges<myDB>());


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow