2016-05-04 10 views
2

Lassen Sie uns sagen, dass ich eine einfache WebsiteWas ist der Workflow in Code-First EF, um Datenbankmodelle zu aktualisieren, ohne die veröffentlichte Website zu unterbrechen?

public class DataContext : DbContext 
    { 
     public DbSet<Stuff> Stuff { get; set; }   
    } 

und ein Modell

public class Stuff 
    { 
    public int ID {get;set; } 
    public string Name {get;set;} 
} 

Und ich bin mit dem Code ersten EF-Modell, und ich traf update-Datenbank und erstellt mit einem Kontext habe meine Tabellen und dann veröffentliche ich meine Website. Alles ist wunderbar. Doch dann entscheide ich habe eine Immobilie zu meinem Modell

public class Stuff 
    { 
    public int ID {get;set; } 
    public string Name {get;set;} 
    public int StuffType {get;set;} 
} 

hinzufügen möchten, und nun schlug ich update-Datenbank und aktualisiert die Datenbank mit der neuen Eigenschaft, aber die veröffentlichte Website jetzt, weil ihr Modell ist gebrochen ist mit dem Datenbankmodell nicht mehr aktuell.

Anders als verzweifelt versuchen, die Website erneut zu veröffentlichen, bevor jemand bemerkt, gibt es eine andere Möglichkeit, mit Code-ersten Migrationen ohne eine veröffentlichte Website zu brechen?

Benötige ich zwei Datenbanken? Wenn ja, wie pflege ich dann die Modelle zwischen den beiden? Dies wird noch durch die Tatsache verstärkt, dass ich normalerweise (mindestens) zwei Git-Zweige habe und die veröffentlichte Seite den Code vom Master-Zweig ausführt und ich arbeite an einem Entwicklungszweig - an dem würde ich meine ändern Modelle.

Was ist der übliche Arbeitsablauf, um diese Art von Problemen zu vermeiden?

+0

Nun ja, Sie wollen in der Regel mindestens 2 Datenbanken (DEV und PROD). Funktionieren alle Ihre DEV, dann veröffentlichen Sie die Datenbank und aktualisieren Sie die Datenbank entweder mit einem migrationsgenerierten Skript oder lassen Sie Ihren Build-Server oder Azure ausführen oder in Ihren App-Start einbauen. http://cpratt.co/migrating-production-database-with-entity-framework-code-first/ –

Antwort