16

Ich habe ASP.NET MVC 3 Projekt, das Entity Framwork 4.3 und seine Migrationen verwendet. Nun möchte ich, dass Entity Framework eine Datenbank für mich erstellt, indem ich bereits vorhandene Migrationen verwende. Wenn ich versuche folgende Update-Datenbank Skript es mir das gibt auszuführen:Wie erstellt man eine Datenbank mithilfe von Code ersten Migrationen?

Update-Database -Verbose -ProjectName AssemblyWithMigrations -StartUpProjectName WebProjectAssembly No migrations configuration type was found in the assembly '/* my name of assembly */'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

Aber, wenn ich versuche, Enable-Migrations zu laufen sehe ich folgendes:

Migrations have already been enabled in project 'AssemblyWithMigrations '. To overwrite the existing migrations configuration, use the -Force parameter.

So, Das Problem ist EF versucht, die aktuelle Version der Migration zu aktualisieren, um die Datenbank zu aktualisieren, nehme ich an. Aber eine Datenbank existiert nicht und sie schlägt offensichtlich fehl.

Die Frage ist: Wie verwendet man EF-Migrationen zum Erstellen einer Datenbank, wenn sie nicht existiert? Oder, was ist der richtige Weg, um dies mit Nuget-Konsole zu tun?

Zusammengefasst, was ich will: 1. Startbefehl (vielleicht update-database), die Datenbank mit meiner Datei web.config 2. alle Migrationen auf der erstellten Datenbank in Reihenfolge ihrer Erstellung angewandt werden schaffen.

Danke. :)

+1

Ich dachte nicht, Migrationen war zum Erstellen von Datenbanken nur für die Aktualisierung von ihnen. –

+0

Wenn die Datenbank nicht existiert, erstellt 'Update-Database' sie automatisch und wendet jede Migration an. Haben Sie zusätzliche Informationen? Es sollte niemals für dasselbe Projekt vorkommen, dass sowohl der Konfigurationstyp "Keine Migrationen gefunden" als auch "Migrationen wurden bereits aktiviert" gefunden wurden. – bricelam

Antwort

32

Ich weiß, das eine alte Frage, aber was zum Teufel ....

Migrationen Damit die anfängliche Datenbank erstellen ich die folgenden Werke gut gefunden habe.

  1. Löschen Sie Ihre Datenbank in SQL Server Object Explorer
  2. löschen alle vorhanden Migrationen aus dem Migrations-Ordner.
  3. In Package-Management- Konsole Typ "Add-Migration InitialCreate"

    [optional, abhängig von Ihrer Datenbank initializer]

  4. In Package-Management- Konsole Typ "Update-Datenbank"

Dadurch erhalten Sie ein einziges Migrationsskript, das Sie von "keine Datenbank" zu einer Datenbank führt, die Ihrem aktuellen Modell entspricht.

+0

Danke für Ihre Antwort. Ich kann die Lösung momentan nicht testen, aber ich bin mir sicher, dass es funktioniert. – sigurd

+0

Schritt 4 wäre: Geben Sie in der PM-Konsole "Update-Database" ein, um die Datenbank zu erstellen. –

+0

[Bearbeitet] Ganz richtig - abhängig von Ihrem Datenbankinitialisierer kann dieser Schritt auch erforderlich sein. Ich verwende einen MigrateDatabaseToLatestVersion-Initialisierer. –

3

Verwenden von Migrationen ist sehr nützlich, aber manchmal habe ich festgestellt, dass es besser ist, die folgenden Anweisungen zu verwenden, wenn Sie mit Datenbanken arbeiten.

Datenbankinitialisierungsstrategien: Verwenden Sie eine der für Sie relevanten kommentierten Anweisungen.

public DataContext(): base("DefaultConnection") 
{ 
    // Database.SetInitializer<DataContext>(new CreateDatabaseIfModelChanges<DataContext>()); 
    // Database.SetInitializer<DataContext>(new CreateDatabaseIfNotExists<DataContext>());                
    // Database.SetInitializer<DataContext>(new DropCreateDatabaseAlways<DataContext>()); 
}                                                             
Verwandte Themen