sql >> Database teknologi >  >> RDS >> Sqlserver

Tvinge kode-først til altid at initialisere en ikke-eksisterende database?

Initializer udføres, når du har brug for at få adgang til databasen, så hvis du vil oprette en database på app, skal du begynde at bruge noget af følgende:

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 En implementering af IDatabaseInitializer, der kun vil genskabe og valgfrit gense databasen med data, hvis databasen ikke eksisterer. For at seed databasen skal du oprette en afledt klasse og tilsidesætte Seed-metoden.

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

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

DropCreateDatabaseIfModelChanges En implementering af IDatabaseInitializer, der kun vil slette, genskabe og eventuelt gense databasen med data, hvis modellen er ændret, siden databasen blev oprettet. Dette opnås ved at skrive en hash af butiksmodellen til databasen, når den oprettes, og derefter sammenligne denne hash med en genereret fra den aktuelle model. For at seed databasen skal du oprette en afledt klasse og tilsidesætte Seed-metoden.

Database.SetInitializer(ny DropCreateDatabaseIfModelChanges());

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

DropCreateDatabaseAlways

En implementering af IDatabaseInitializer, der altid vil genskabe og eventuelt gense databasen med data første gang, en kontekst bruges i applikationsdomænet. For at seed databasen skal du oprette en afledt klasse og tilsidesætte Seed-metoden.

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

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

Jeg anbefaler, at du ser på Migreringer hvis du vil spore, skal du gendanne de ændringer, du har foretaget i din DB til den tidligere tilstand http ://msdn.microsoft.com/hr-hr/data/jj591621 .

OPDATERING

context.Database.Initialize(true);
 

For MVC-applikationer tilføj en sektion til Application_Start() metode i 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);
     }    
}
 

Du kan også bruge en brugerdefineret initialisering :

public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{

}
 

og brug derefter

Database.SetInitializer(new MyDbInit());
 

OPDATERING 2

Lav en ny tom MVC4-applikation kaldet DeleteDBOnEveryRequest .Sæt følgende i 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);
            }    
        }
 

Lav en ny controller kaldet DatabaseController med to handlinger.

I Adgang handling du sletter DB'en og omdirigerer til Genoprettet handling, hvorfra du opretter en DB, som den tidligere blev slettet.

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

Er det det, du ønskede?




  1. Fælles kriteriebegrænsning i Hibernate for alle forespørgsler for alle tabeller

  2. Sådan returneres en liste over tilgængelige sorteringer i PostgreSQL

  3. SQL rekursiv menusortering

  4. Eksporter data fra SQL Server til Excel og tekstfil via SSIS-pakken