2013-03-21 12 views
7

Ich versuche, EF-Code erste Migrationen zu verwenden, um eine Datenbank zu erstellen, wenn sie nicht vorhanden ist. Bisher habe ich Enabled-Migrations erfolgreich. Ich habe auch Add-Migrations verwendet, um eine erste Migration durchzuführen, die die Datenbank erstellt. Das Skript ist in der Richtung "Migration" und sieht korrekt aus. MigrateDatabaseToLatestVersion-Initialisierer konnte Datenbank nicht erstellen

Dies ist der Körper meines Haupt Methode

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>()); 
var directConfigContext = new MyDbContext(); 

Alles, was ich gelesen habe, das sagt das alles ist, was ich brauche. MyDbContext ist in app.config und sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
     <add name="MyDbContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=DbConfig;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
</configuration> 

Außerdem, wenn ich die DbMigrator Klasse von EF bereitgestellt verwenden, wird die Datenbank korrekt gebaut (vermutlich die ursprüngliche Datenbankmigration Skript verwenden).

// This is how it actually works including creating the database if it doesn't exist. 
var dbMigrator = new DbMigrator(new Configuration()); 
dbMigrator.Update(); 

Von dem, was ich verstehe, die initializer auf MyDbContext Einstellung und danach Instanziieren dass DbContext die Datenbank auf den neuesten Migration schaffen sollte ... was bin ich dabei?

Antwort

7

Das Instanziieren eines DbContext führt den damit verbundenen Initialisierer nicht aus. Stattdessen müssen Sie entweder die Datenbank aktualisieren oder den Initialisierer der zugrunde liegenden Datenbank direkt aufrufen.

MyDbContext.MyEntity.Add(new MyEntity { Name = "Nelson" }); 
// Or 
MyDb.Context.Database.Initialize(true); // force the initialization 
1

Die akzeptierte Antwort wird das Problem für andere Menschen lösen, aber ich war mit einem anderen Grund, dieses gleiche Problem: Ich habe meine Datenbank gelöscht und das Modell modifiziert, indem einige Klassen in meinem DbContext ändern.

Wenn ich meine Anwendung ausgeführt und instanziert und versuchte, die DbContext zum ersten Mal zu verwenden, wurde die Datenbank nicht erstellt, da die letzte Migration nicht die letzten Änderungen in der DbContext widerspiegelte. Um das Problem zu lösen, habe ich einfach eine neue Migration hinzugefügt, indem ich den Befehl auf der Package Manager-Konsole ausgeführt habe, und beim nächsten Start der Anwendung wurde die Datenbank ordnungsgemäß erstellt und sed.

Verwandte Themen