Più contesti DB nello stesso DB e applicazione in EF 6 e migrazioni First Code

Sono nuovo in Entity Framework. Sto provando ad installare un’applicazione MVC che utilizza EF 6. Sto usando Code First Migrations. Sto utilizzando le aree nell’app e vorrei avere diversi DbContexts in ogni area per suddividerla. So che EF 6 ha ContextKey, ma non riesco a trovare informazioni complete su come usarlo. Attualmente posso utilizzare le migrazioni solo un contesto alla volta.

Qualcuno può dare un esempio con abbastanza dettagli per una nuova persona a EF come me da capire e usare.

Entity Framework 6 ha aggiunto il supporto per più DbContext aggiungendo i -ContextTypeName e -MigrationsDirectory . Ho appena eseguito i comandi nella mia console di Gestione pacchetti e incollato l’output di seguito …

Se nel progetto sono presenti 2 DbContext e si eseguono le enable-migrations , verrà visualizzato un errore (come probabilmente già sapete):

 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. 

Quindi è necessario eseguire enable-migrations su ciascun DbContext separatamente. E devi specificare una cartella per ogni file Configuration.cs da generare …

 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. 

Per aggiungere migrazioni per ogni DbContext , lo fai in questo modo specificando il nome completo della class Configuration :

 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. 

E tu esegui update-database nello stesso modo:

 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. 

Spero che questo ti aiuti.