2017-05-25 2 views
0

Ich verwende Entity Framework Code ersten Ansatz und haben folgenden Modell und Db-Kontext.Kann ich die Migration aktivieren und Datenbank mit Code aktualisieren

public class Patient 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
    } 

    public class PatientContext:DbContext 
    { 
     public DbSet<Patient> Persons { get; set; } 
    } 

nun das Modell in der Datenbank erstellt haben, ich habe Enable Migration zu starten und wenn Änderungen dann laufen müssen Update database Paket-Manager-Konsole.

Aber kann ich das irgendwie mit Code machen? Wenn also eine Konsolenanwendung ausgeführt wird, erstellt sie alle Tabellenschemata.

class Program 
    { 
     static void Main(string[] args) 
     { 
      //Code to Create my tables 
      //Something similar to enable migration and update database 
     } 
    } 

kann ich einen Datensatz innerhalb der Haupt App erstellt, und das wird die Tabellenstruktur erstellen, aber eine Aufzeichnung zu schaffen Tabellenstruktur zu schaffen scheint überflüssig. Wenn es Modusänderungen gibt, löst der folgende Code eine Ausnahme aus.

Gibt es einen besseren Ansatz?

static void Main(string[] args) 
     { 
      using (PatientContext pcontext = new DatabaseMigApp.PatientContext()) 
      { 
       pcontext.Patients.Add(new Patient() { FirstName = "Steve",Id = 1}); 
       pcontext.SaveChanges(); 

      } 
     } 
+1

Siehe https://romiller.com/2012/02/09/running-scripting-migrations-from-code/ –

Antwort

2

Ja, gibt es. Sie werden zunächst Enable-Migrations -EnableAutomaticMigrations von Paket-Manager-Konsole ausgeführt werden, so dass sie eine Configuration-Klasse erzeugt, wie folgt:

internal sealed class Configuration : DbMigrationsConfiguration<DatabaseMigApp.PatientContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(DatabaseMigApp.PatientContext context) 
    { 
    } 
} 

Dann können Sie die Program.cs wie folgt aktualisieren automatisch auf die neueste Version zu migrieren basierend auf dem Modellwechsel:

using System.Data.Entity; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     using (PatientContext pcontext = new DatabaseMigApp.PatientContext()) 
     { 
      Database.SetInitializer(new MigrateDatabaseToLatestVersion<PatientContext, Configuration>()); 
      pcontext.Database.Initialize(true); 
     } 
    } 
} 

Wenn Sie keine automatische Migration nutzen und erzeugen sie manuell (für mehr Kontrolle), könnten Sie die automatischen Migrationen und Add-Migration jedes Mal, wenn Sie Ihr Modell ändern auszuschalten. Der Code in der Datei program.cs würde weiterhin ausreichen, um Ihre Datenbank beim Ausführen der Konsolenanwendung zu aktualisieren.

Lesen Sie mehr über automatische Migrationen here

Verwandte Themen