Inicializátor se spustí, když potřebujete získat přístup k databázi, takže pokud chcete vytvořit databázi při spuštění aplikace, použijte cokoliv z následujícího:
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 Implementace IDatabaseInitializer, která znovu vytvoří a volitelně znovu nasadí data, pouze pokud databáze neexistuje. Chcete-li databázi očkovat, vytvořte odvozenou třídu a přepište metodu Seed.
Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>());
http://msdn.microsoft.com/ en-us/library/gg679221(v=vs.103).aspx
DropCreateDatabaseIfModelChanges Implementace IDatabaseInitializer, která odstraní, znovu vytvoří a volitelně znovu nasadí data, pouze pokud se model od vytvoření databáze změnil. Toho je dosaženo zapsáním hash modelu obchodu do databáze při jeho vytvoření a poté porovnáním tohoto hash s hash generovaným z aktuálního modelu. Chcete-li databázi očkovat, vytvořte odvozenou třídu a přepište metodu Seed.
Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
http://msdn.microsoft.com/ en-us/library/gg679604(v=vs.103).aspx
DropCreateDatabaseAlways
Implementace IDatabaseInitializer, která vždy znovu vytvoří databázi a volitelně ji znovu nasadí daty při prvním použití kontextu v doméně aplikace. Chcete-li databázi očkovat, vytvořte odvozenou třídu a přepište metodu Seed.
Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());
http://msdn.microsoft.com/ en-us/library/gg679506(v=vs.103).aspx
Doporučuji, abyste se podívali na Migrace pokud chcete sledovat, vraťte změny provedené v databázi do předchozího stavu http ://msdn.microsoft.com/hr-hr/data/jj591621 .
AKTUALIZACE
context.Database.Initialize(true);
Pro aplikaci MVC přidejte sekci do Application_Start()
metoda v 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);
}
}
Můžete také použít vlastní inicializátor:
public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{
}
a poté použijte
Database.SetInitializer(new MyDbInit());
AKTUALIZACE 2
Vytvořte novou prázdnou aplikaci MVC4 s názvem DeleteDBOnEveryRequest .Do Global.asax Application_start
vložte následující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);
}
}
Vytvořte nový ovladač s názvem DatabaseController se dvěma akcemi.
V části Přístup akci smažete DB a přesměrujete se na Znovu vytvořeno akce, ze které vytvoříte DB, protože byla dříve odstraněna.
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();
}
}
}
Je to to, co jsi chtěl?