Entity Framework 6 fügte Unterstützung für mehrere DbContext
s hinzu, indem die Flags -ContextTypeName
und hinzugefügt wurden -MigrationsDirectory
. Ich habe gerade die Befehle in meiner Package Manager-Konsole ausgeführt und die folgende Ausgabe eingefügt ...
Wenn Sie 2 DbContext
Sekunden in Ihrem Projekt haben und ausführen enable-migrations
, wird eine Fehlermeldung angezeigt (wie Sie wahrscheinlich bereits wissen):
PM> enable-migrations
More than one context type was found in the assembly 'WebApplication3'.
To enable migrations for 'WebApplication3.Models.ApplicationDbContext', use Enable-Migrations -ContextTypeName WebApplication3.Models.ApplicationDbContext.
To enable migrations for 'WebApplication3.Models.AnotherDbContext', use Enable-Migrations -ContextTypeName WebApplication3.Models.AnotherDbContext.
Sie müssen also enable-migrations
jeweils DbContext
einzeln laufen . Und Sie müssen für jede Configuration.cs
zu generierende Datei einen Ordner angeben ...
PM> Enable-Migrations -ContextTypeName ApplicationDbContext -MigrationsDirectory Migrations\ApplicationDbContext
Checking if the context targets an existing database...
Code First Migrations enabled for project WebApplication3.
PM> Enable-Migrations -ContextTypeName AnotherDbContext -MigrationsDirectory Migrations\AnotherDbContext
Checking if the context targets an existing database...
Code First Migrations enabled for project WebApplication3.
Um Migrationen für jede hinzuzufügen DbContext
, gehen Sie folgendermaßen vor, indem Sie den vollständig qualifizierten Namen der Configuration
Klasse angeben:
PM> Add-Migration -ConfigurationTypeName WebApplication3.Migrations.ApplicationDbContext.Configuration "InitialDatabaseCreation"
Scaffolding migration 'InitialDatabaseCreation'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration InitialDatabaseCreation' again.
PM> Add-Migration -ConfigurationTypeName WebApplication3.Migrations.AnotherDbContext.Configuration "InitialDatabaseCreation"
Scaffolding migration 'InitialDatabaseCreation'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration InitialDatabaseCreation' again.
Und du rennst update-database
genauso:
PM> Update-Database -ConfigurationTypeName WebApplication3.Migrations.ApplicationDbContext.Configuration
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201402032113124_InitialDatabaseCreation].
Applying explicit migration: 201402032113124_InitialDatabaseCreation.
Running Seed method.
PM> Update-Database -ConfigurationTypeName WebApplication3.Migrations.AnotherDbContext.Configuration
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201402032113383_InitialDatabaseCreation].
Applying explicit migration: 201402032113383_InitialDatabaseCreation.
Running Seed method.
Hoffe das hilft.
MigrateDatabaseToLatestVersion
Einfrieren derctx.Database.initialize()
einzelnen Kontexte verwenden, um sie in der richtigen Reihenfolge auszuführen, oder denUpdate-Database
Befehl von Hand in der richtigen Reihenfolge ausführen. (Und umgekehrt, wenn Sie eine Datenbankmigration zur vorherigen Version durchführen). Es ist "gefährlich" , kann aber gemacht werden.