2012-01-09 12 views
5

he creado un DbContext así:¿Cómo recrear la base de datos en EF si mi modelo cambia?

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

Esto generó mi base de datos y las dos tablas above..Great

luego decidí añadir otro DbSet en la mezcla & me dio un error:

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

estoy al tanto de las correcciones para esta usando modelbuilder.IncludeMetadataInDatabase = false; y Database.SetInitializer<ClubmansGuideDB>(null);

1) ¿Cuál es la forma correcta de agregar mis nuevas clases al contexto y hacer que se generen en la Base de Datos?

2) En mis inútiles intentos de resolverlo yo mismo eliminé las tablas e intenté volver a ejecutar la aplicación sin éxito. Luego eliminé la base de datos completa y volví a ejecutar, y no vuelve a generar la base de datos. ¿Cómo puedo empezar desde cero? ¿Hay algún caché en alguna parte?

+2

** entity framework issue ** no es el mejor título que he visto en mi vida. – gdoron

+0

¿De qué sirve ese comentario, cuando hay tantas buenas respuestas? – LenPopLilly

Respuesta

15

te creo' está buscando:

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

A partir de EF 4.1 y superior.

Tenga en cuenta que esto supone que tiene permiso incluso para soltar su base de datos. Lo hago localmente para facilitar el desarrollo, pero lo deshabilito en etapas/producción (hago una comparación de esquema manual y envío mis cambios).

Por cierto, para las pruebas, si es necesario obligar a volver a crear la base de datos, que puede hacer:

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

(using si aún no dispone de una referencia a su base de datos)

+0

Muchas gracias, esta fue la única respuesta que recreó el DB – LenPopLilly

+0

Database.SetInitializer (nuevo DropCreateDatabaseIfModelChanges ()); Database.Initialize (true); ¿Por qué no trabajar de mí? – AminM

0

Intente poner esto en su método Global.asax.cs Application_Start().

Database.SetInitializer<DatabaseContext>(null); 

Para restablecer la base de datos desde cero en ejecución de aplicaciones hacen una clase como esta

//Where myDB is your context 
public class EntityBase: DropCreateDatabaseAlways<myDB> 
{ 

} 

Luego, en el método Application Start() puede hacer esto

Database.SetInitializer(new EntityBase()); 
+0

también puede anular el método Seed y llenar su base de datos con datos de prueba. http://msdn.microsoft.com/en-us/library/gg679212(v=vs.103).aspx – Kyle

+0

Gracias Kyle pero no funcionó para mí – LenPopLilly

3

puede dejar que el marco de la entidad recrear toda la base de datos mediante el uso de un Database Initializer o si desea migrar los datos se puede ver en la Code First Migrations

lo siguiente sería volver a crear la base de datos cuando los cambios de modelo:

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

Gracias Wouter pero no funcionó para mí – LenPopLilly

Cuestiones relacionadas