Inizializzatore viene eseguito quando è necessario accedere al database, quindi se si desidera creare un database all'avvio dell'app, utilizzare una delle seguenti opzioni:
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
CreateDatabaseIfNotExists Un'implementazione di IDatabaseInitializer che ricreerà e facoltativamente re-seed il database con i dati solo se il database non esiste. Per eseguire il seeding del database, crea una classe derivata e sovrascrivi il metodo Seed.
Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>());
http://msdn.microsoft.com/ it-us/library/gg679221(v=vs.103).aspx
DropCreateDatabaseIfModelChanges Un'implementazione di IDatabaseInitializer che eliminerà, ricreerà e, facoltativamente, reindirizzerà il database con i dati solo se il modello è stato modificato dalla creazione del database. Ciò si ottiene scrivendo un hash del modello del negozio nel database quando viene creato e quindi confrontando quell'hash con uno generato dal modello corrente. Per eseguire il seeding del database, crea una classe derivata e sovrascrivi il metodo Seed.
Database.SetInitializer(nuovo DropCreateDatabaseIfModelChanges());
http://msdn.microsoft.com/ it-us/library/gg679604(v=vs.103).aspx
DropCreateDatabaseAlways
Un'implementazione di IDatabaseInitializer che ricreerà sempre e, facoltativamente, ripristinerà il database con i dati la prima volta che un contesto viene utilizzato nel dominio dell'applicazione. Per eseguire il seeding del database, crea una classe derivata e sovrascrivi il metodo Seed.
Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());
http://msdn.microsoft.com/ it-us/library/gg679506(v=vs.103).aspx
Ti consiglio di guardare Migrazioni se vuoi tenere traccia, ripristina le modifiche apportate al tuo DB allo stato precedente http ://msdn.microsoft.com/hr-hr/data/jj591621 .
AGGIORNAMENTO
context.Database.Initialize(true);
Per l'applicazione MVC aggiungi una sezione a Application_Start()
metodo nel 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);
}
}
Inoltre puoi usare un inizializzatore personalizzato:
public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{
}
e poi usa
Database.SetInitializer(new MyDbInit());
AGGIORNAMENTO 2
Crea una nuova applicazione MVC4 vuota chiamata DeleteDBOnEveryRequest .Inserisci quanto segue in 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);
}
}
Crea un nuovo controller chiamato DatabaseController con due azioni.
Nell'Accesso azione si elimina il DB e si reindirizza a Ricreato azione da cui crei un DB poiché era stato precedentemente eliminato.
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();
}
}
}
È questo che volevi?