Entity Framework 6 dodał obsługę wielu DbContext
s, dodając flagi -ContextTypeName
i -MigrationsDirectory
. Właśnie uruchomiłem polecenia w mojej konsoli Menedżera pakietów i wkleiłem poniższe dane wyjściowe ...
Jeśli masz 2 DbContext
sekundy w swoim projekcie i uruchomisz enable-migrations
, pojawi się błąd (jak prawdopodobnie już wiesz):
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.
Musisz więc biegać enable-migrations
po każdym DbContext
osobno. I musisz określić folder dla każdego Configuration.cs
pliku, który ma zostać wygenerowany ...
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.
Aby dodać migracje dla każdego DbContext
, robisz to w ten sposób, określając w pełni kwalifikowaną nazwę Configuration
klasy:
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.
I biegasz w update-database
ten sam sposób:
PM> Update-Database -ConfigurationTypeName WebApplication3.Migrations.ApplicationDbContext.Configuration
Specify the
Applying explicit migrations: [201402032113124_InitialDatabaseCreation].
Applying explicit migration: 201402032113124_InitialDatabaseCreation.
Running Seed method.
PM> Update-Database -ConfigurationTypeName WebApplication3.Migrations.AnotherDbContext.Configuration
Specify the
Applying explicit migrations: [201402032113383_InitialDatabaseCreation].
Applying explicit migration: 201402032113383_InitialDatabaseCreation.
Running Seed method.
Mam nadzieję że to pomoże.
MigrateDatabaseToLatestVersion
forzing thectx.Database.initialize()
każdego kontekstu, aby uruchomić we właściwej kolejności, lub uruchomićUpdate-Database
polecenie ręcznie we właściwej kolejności. (I odwrotnie, jeśli wykonasz migrację bazy danych do poprzedniej wersji). Jest to „niebezpieczne”, ale można to zrobić.