2011-05-25 12 views
15

Escribí una aplicación ASP.Net MVC 3 utilizando el paradigma Code First, por lo que cuando realizo un cambio en el modelo, Entity Framework intenta automáticamente volver a crear el subyacente Base de datos SQL Server a través de las sentencias DROP y CREATE. El problema es que la aplicación está alojada en un servidor remoto de terceros que limita la cantidad de bases de datos que puedo tener y no parece permitirme ejecutar programáticamente sentencias "CREATE DATABASE ..." como lo deduzco de este mensaje de error:Primer código de Entity Framework 4 - Impedir DB Drop/Create

Permiso CREATE DATABASE denegado en la base de datos 'master'.

¿Hay alguna manera de detener el marco de la entidad se caiga y tratar de volver a crear toda la base de datos y en su lugar que sea simplemente eliminar las tablas y volver a crearlos?

Después de crear la base de datos manualmente y ejecutar la aplicación también me sale el siguiente error supongo que el marco de la entidad intenta modificar la base de datos:

Compatibilidad modelo no se puede comprobar porque la base de datos no contiene el modelo metadata Asegúrese de que IncludeMetadataConvention se haya agregado a las convenciones de DbModelBuilder.

+0

¿Qué tiene que ver este problema con ASP.NET? –

+0

@ John Saunders: Incluí ASP.Net en la pregunta, ya que la estoy usando para desarrollar la aplicación web junto con EF Code First. Estoy de acuerdo con su edición en que para ser más preciso, el problema es con la inicialización de la base de datos EF Code First. –

Respuesta

11

ACTUALIZACIÓN: Encontramos esta joya a través de Google, parece que es exactamente lo que necesita: http://nuget.org/Tags/IDatabaseInitializer

Puede utilizar un inicializador base de datos diferente. Digamos que su contexto se llama SampleContext entonces su constructor se vería así:

public SampleContext() 
    { 
     System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<SampleContext>()); 
    } 

Tenga en cuenta que lo anterior es el inicializador por defecto. Probablemente necesite crear su propio inicializador personalizado implementando IDatabaseInitializer. Aquí hay buena información: http://sankarsan.wordpress.com/2010/10/14/entity-framework-ctp-4-0-database-initialization/

+0

El uso del paquete (Devtalk.EF.CodeFirst.CreateTablesOnly) desde el enlace en su nota de actualización ha resuelto el problema. ¡Darko eres increíble! Muchas gracias! –

+0

Sin problemas, feliz de ayudar –

+0

Desde entonces he encontrado la siguiente publicación que es muy útil en el tema de la inicialización de base de datos personalizada con EF: [enlace] (http://blogs.microsoft.co.il/blogs/gilf/archive /2011/05/30/creating-a-code-first-database-initializer-strategy.aspx) –

1

Al usar EF 4.3 con Migraciones, no obtienes este comportamiento, al menos no lo he visto. Pero también tengo este conjunto en mi código:

public sealed class DbConfiguration : DbMigrationsConfiguration<DatabaseContext> 
{ 
    public DbConfiguration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 
} 
+0

Gracias @ferventcoder. No creo que tuviera EF 4.3 Migrations disponible cuando hice mi proyecto. Parece que es un buen paso adelante. –

Cuestiones relacionadas