sql >> Base de Datos >  >> RDS >> Sqlserver

¿Obligar al código primero a inicializar siempre una base de datos inexistente?

Inicializador se ejecuta cuando necesita acceder a la base de datos, por lo que si desea crear una base de datos en el inicio de la aplicación, use algo de lo siguiente:

    context.Database.Initialize(true); //If set to true the initializer is run even if it has already been run.       
    context.Database.Create()

http://msdn.microsoft.com/en-us/library/system.data.entity.database.initialize(v=vs.103).aspx

Crear base de datos si no existe Una implementación de IDatabaseInitializer que recreará y, opcionalmente, reinicializará la base de datos con datos solo si la base de datos no existe. Para sembrar la base de datos, cree una clase derivada y anule el método Seed.

Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>());

http://msdn.microsoft.com/ es-es/library/gg679221(v=vs.103).aspx

DropCreateDatabaseIfModelChanges Una implementación de IDatabaseInitializer que eliminará, recreará y, opcionalmente, volverá a inicializar la base de datos con datos solo si el modelo ha cambiado desde que se creó la base de datos. Esto se logra escribiendo un hash del modelo de tienda en la base de datos cuando se crea y luego comparando ese hash con uno generado a partir del modelo actual. Para sembrar la base de datos, cree una clase derivada y anule el método Seed.

Base de datos.SetInitializer(nuevo DropCreateDatabaseIfModelChanges());

http://msdn.microsoft.com/ es-es/library/gg679604(v=vs.103).aspx

DropCreateDatabaseAlways

Una implementación de IDatabaseInitializer que siempre recreará y, opcionalmente, reinicializará la base de datos con datos la primera vez que se use un contexto en el dominio de la aplicación. Para sembrar la base de datos, cree una clase derivada y anule el método Seed.

Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());

http://msdn.microsoft.com/ es-es/library/gg679506(v=vs.103).aspx

Te recomiendo que mires Migraciones si desea realizar un seguimiento, revierta los cambios que realizó en su base de datos al estado anterior http ://msdn.microsoft.com/hr-hr/data/jj591621 .

ACTUALIZAR

context.Database.Initialize(true);

Para la aplicación MVC, agregue una sección a Application_Start() método en Global.asax

protected void Application_Start() {

     Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>()); 

     // Forces initialization of database on model changes.
     using (var context= new MyContext()) {
          context.Database.Initialize(force: true);
     }    
}

También puede usar un inicializador personalizado:

public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{

}

y luego usar

Database.SetInitializer(new MyDbInit());

ACTUALIZACIÓN 2

Cree una nueva aplicación MVC4 vacía llamada DeleteDBOnEveryRequest .Ponga lo siguiente en Global.asax Application_start

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            Database.SetInitializer<BlogContext>(new DropCreateDatabaseAlways<BlogContext>());    

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

Cree un nuevo controlador llamado DatabaseController con dos acciones.

En el Acceso acción, elimina la base de datos y la redirige a Recreado acción desde donde crea una base de datos ya que se eliminó previamente.

namespace DeleteDBOnEveryRequest.Controllers
{
    public class DatabaseController : Controller
    {
        public ActionResult Access()
        {
            using (var context = new BlogContext())
            {
                context.Database.Delete();
            } 
            return RedirectToAction("Recreated");
        }

        public ActionResult Recreated()
        {
            using (var context = new BlogContext())
            {
                context.Database.Initialize(force: true);                
            }
            return View();
        }
    }
}

¿Es esto lo que querías?