sql >> Database >  >> RDS >> Sqlserver

Code-first dwingen om altijd een niet-bestaande database te initialiseren?

Initialisator wordt uitgevoerd wanneer u toegang moet krijgen tot de database, dus als u een database wilt maken bij het starten van de app, gebruik dan een van de volgende opties:

    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 Een implementatie van IDatabaseInitializer die de database opnieuw maakt en optioneel opnieuw met gegevens bezaait als de database niet bestaat. Om de database te seeden, maakt u een afgeleide klasse en overschrijft u de Seed-methode.

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

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

DropCreateDatabaseIfModelChanges Een implementatie van IDatabaseInitializer die de database alleen met gegevens verwijdert, opnieuw maakt en optioneel opnieuw invult als het model is gewijzigd sinds de database is gemaakt. Dit wordt bereikt door een hash van het winkelmodel naar de database te schrijven wanneer deze wordt gemaakt en die hash vervolgens te vergelijken met een hash die is gegenereerd op basis van het huidige model. Om de database te seeden, maakt u een afgeleide klasse en overschrijft u de Seed-methode.

Database.SetInitializer(nieuwe DropCreateDatabaseIfModelChanges());

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

DropCreateDatabaseAlways

Een implementatie van IDatabaseInitializer waarmee de database altijd opnieuw wordt gemaakt en optioneel opnieuw wordt gevuld met gegevens wanneer een context voor het eerst wordt gebruikt in het toepassingsdomein. Om de database te seeden, maakt u een afgeleide klasse en overschrijft u de Seed-methode.

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

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

Ik raad u aan te kijken naar Migraties als je wilt bijhouden, zet je de wijzigingen die je in je database hebt aangebracht terug in de vorige staat http ://msdn.microsoft.com/hr-hr/data/jj591621 .

UPDATE

context.Database.Initialize(true);

Voeg voor MVC-applicatie een sectie toe aan de Application_Start() methode in de 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);
     }    
}

U kunt ook een aangepaste initialisatie gebruiken:

public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{

}

en gebruik dan

Database.SetInitializer(new MyDbInit());

UPDATE 2

Maak een nieuwe lege MVC4-toepassing met de naam DeleteDBOnEveryRequest .Plaats het volgende in de 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);
            }    
        }

Maak een nieuwe controller met de naam DatabaseController met twee acties.

In de Toegang actie u de DB verwijdert en omleidt naar Recreated actie van waaruit u een DB maakt zoals deze eerder was verwijderd.

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();
        }
    }
}

Is dit wat je wilde?




  1. T-SQL Hoe tabellen dynamisch te creëren in opgeslagen procedures?

  2. De uitvoering van een instructie in PostgreSQL pauzeren

  3. PostgreSQL:hoofdletterongevoelige tekenreeksvergelijking

  4. SELECT of PERFORM in een PL/pgSQL-functie