visual una studio proyecto para extension data crear como code carpeta visual-studio-2010 entity-framework asp.net-mvc-3 ef-code-first sql-server-2008-r2

visual studio 2010 - studio - Entity Framework no crea una base de datos



crear un proyecto en visual studio code (3)

He estado jugando con la característica Code First de Entity Framework 4.1 usando un proyecto ASP.NET MVC 3.

Sin embargo, la base de datos (SQL Server 2008 R2) no crea automáticamente la asignación de tabla en el inicio de la aplicación. ¿Alguna idea sobre cómo hacerlo?

El proyecto tiene solo un POCO:

namespace RIS.Models { public class Person { [Key] public virtual string NRIC { get; protected set; } public virtual string FirstName { get; protected set; } public virtual string MiddleName { get; protected set; } public virtual string LastName { get; protected set; } } }

También tiene la siguiente clase de contexto de base de datos:

namespace RIS.Models { public class RIS_DB : DbContext { public DbSet<Person> People { get; set; } } }

He agregado una cadena de conexión SQL al archivo web.config global de la siguiente manera:

<add name="RIS_DB" connectionString="Data Source=URAHARA-PC;Initial Catalog=RIS_DB; Integrated Security=SSPI;Pooling=False" providerName="System.Data.SqlClient"/>

También hay una instrucción explícita para crear la base de datos si no existe en el archivo Global.asax.cs:

protected void Application_Start() { Database.SetInitializer(new CreateDatabaseIfNotExists<RIS_DB>()); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); }


En su lugar, se le preguntó en los foros de MSDN y obtuvo una respuesta satisfactoria:

Entity Framework no creará una base de datos hasta el primer acceso. El bloque de código actual en Application_Start() solo especifica la estrategia que se utilizará al crear la base de datos durante el primer acceso.

Para activar la creación de la base de datos al inicio, se debe crear una instancia del contexto de la base de datos y se debe invocar context.Database.Initialize(true) .


Sé que esto ya fue respondido por mazatsushi de la manera más adecuada. Pero solo para aclararlo a los principiantes: Basado en la respuesta de mazatsushi, lo que tienes que hacer es escribir:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SorteoContext>()); using (var context = new SorteoContext()) { context.Database.Initialize(force: true); }

dentro de la función Application_Start () en Global.asax.cs y Boom! ¡trabajos!


Tengo el mismo problema y encontré una solución elegante: llame al SetInitializer en el constructor de su DbContext:

public class MyDbContext : DbContext { protected MyDbContext : this("MyConnection") { Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>()); } }

La configuración de mi aplicación:

<connectionStrings> <add name="MyConnection" connectionString="Data Source=(LocalDb)/v11.0;AttachDbFilename=|DataDirectory|/MyDB.mdf;Initial Catalog=MyDB;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings>