sql >> Databáze >  >> RDS >> Sqlserver

Nutit nejprve kód, aby vždy inicializoval neexistující databázi?

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?




  1. Správný způsob, jak získat uživatelské jméno a heslo z připojovacího řetězce?

  2. Použití `rand()` s `having`

  3. Přísně automatické zvýšení hodnoty v MySQL

  4. Rails:Chyba při instalaci pg gem