sql >> Databasteknik >  >> RDS >> Sqlserver

Tvinga kod-först att alltid initialisera en obefintlig databas?

Initiering exekveras när du behöver komma åt databasen, så om du vill skapa en databas på appen börja använda något av följande:

    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 av IDatabaseInitializer som kommer att återskapa och valfritt återföda databasen med data endast om databasen inte finns. För att seed databasen, skapa en härledd klass och åsidosätt Seed-metoden.

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

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

DropCreateDatabaseIfModelChanges En implementering av IDatabaseInitializer som kommer att ta bort, återskapa och eventuellt återinsätta databasen med data endast om modellen har ändrats sedan databasen skapades. Detta uppnås genom att skriva en hash av butiksmodellen till databasen när den skapas och sedan jämföra denna hash med en som genereras från den aktuella modellen. För att seed databasen, skapa en härledd klass och åsidosätt Seed-metoden.

Database.SetInitializer(nya DropCreateDatabaseIfModelChanges());

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

DropCreateDatabaseAlways

En implementering av IDatabaseInitializer som alltid kommer att återskapa och eventuellt återinsätta databasen med data första gången som en kontext används i applikationsdomänen. För att seed databasen, skapa en härledd klass och åsidosätt Seed-metoden.

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

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

Jag rekommenderar att du tittar på Migreringar om du vill spåra, återställ ändringarna du gjorde i din DB till det tidigare tillståndet http ://msdn.microsoft.com/hr-hr/data/jj591621 .

UPPDATERA

context.Database.Initialize(true);

För MVC-applikationer lägg till en sektion i Application_Start() metoden 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 också använda en anpassad initialiserare :

public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{

}

och använd sedan

Database.SetInitializer(new MyDbInit());

UPPDATERING 2

Skapa en ny tom MVC4-applikation som heter DeleteDBOnEveryRequest .Sätt in följande 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);
            }    
        }

Skapa en ny kontroller som heter DatabaseController med två åtgärder.

I Åtkomst åtgärd du tar bort DB och omdirigerar till Återskapad åtgärd där du skapar en DB som den tidigare raderades.

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

Var det detta du ville ha?




  1. Flytta Wordpress-webbplats till Docker:Fel vid upprättande av DB-anslutning

  2. TSQL:Try-Catch Transaction i Trigger

  3. FÖRENA ALLA och INTE IN tillsammans

  4. Hur man räknar om ett fält på GROUP