Ich verwende Entity Framework Code Erste Migrationen, und ich habe ein Szenario, in dem ich eine Reihe von Integrationstests ausführen möchte. Jedes Mal, wenn die Tests durchführen, möchte ich die Datenbank neu erstellen, und wenden Sie alle MigrationenEF 5, Code First - Erstellen Sie eine neue Datenbank und führen Sie alle Migrationen programmatisch durch
Die Schritte sein sollten:
- Tropfen die vorhandene Testdatenbank (falls vorhanden)
- Erstellen Sie einen neuen Test Datenbank und gelten alle Migrationen
- Seed Daten
Dies ist ein vorhandenes Projekt, das ich hinzugefügt haben Migrationen, und ich benutzte die Enable-Migrations-Befehl eine „InitialCreate“ Migration erstellen th at enthält Code, um alle Tabellen zu meiner Datenbank hinzuzufügen.
Der Code in meine Gewohnheit ist IDatabaseInitializer
wie folgt:
public void InitializeDatabase(MyContext context)
{
//delete any existing database, and re-create
context.Database.Delete();
context.Database.Create();
//apply all migrations
var dbMigrator = new DbMigrator(new Configuration());
dbMigrator.Update();
//seed with data
this.Seed(context);
context.SaveChanges();
}
Die Up
Methode meiner InitialCreate Migration wird von diesem Code aufgerufen zu werden, die nicht das, was ich erwartet hatte. Stattdessen werden alle Tabellen erstellt, wenn die Methode aufgerufen wird. Ich brauche die InitialCreate-Migration, um ausgeführt zu werden, da ich dort zusätzlichen Code zum Erstellen gespeicherter Prozeduren habe.
Also meine Fragen ist, wie programmiere ich programmatisch eine neue Datenbank und führen Sie alle Migrationen (einschließlich der InitialCreate Migration)?