wake-up-neo.com

Mehrere DB-Kontexte in derselben DB und Anwendung in EF 6 und Code First Migrations

Ich bin neu in Entity Framework. Ich versuche, eine MVC-Anwendung einzurichten, die EF 6 verwendet. Ich verwende Code First Migrations. Ich verwende Bereiche in der App und möchte verschiedene DbContexts in jedem Bereich haben, um ihn aufzuteilen. Ich weiß, dass EF 6 ContextKey enthält, kann jedoch keine vollständigen Informationen zur Verwendung finden. Momentan kann ich Migrationen immer nur in einem Kontext verwenden.

Kann jemand ein Beispiel mit genügend Details geben, damit eine neue Person EF wie ich verstehen und verwenden kann.

91
Lrayh

Entity Framework 6 fügte Unterstützung für mehrere DbContext hinzu, indem die Flags -ContextTypeName Und -MigrationsDirectory Hinzugefügt wurden. Ich habe gerade die Befehle in meiner Package Manager-Konsole ausgeführt und die folgende Ausgabe eingefügt ...

Wenn Sie 2 DbContext in Ihrem Projekt haben und enable-migrations Ausführen, erhalten Sie eine Fehlermeldung (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 Auf jedem DbContext separat ausführen. Und Sie müssen einen Ordner für jede zu generierende Configuration.cs - Datei 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.

So fügen Sie Migrationen für jede DbContext -Klasse hinzu, 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 Sie führen update-database Auf dieselbe Weise aus:

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.

172
Anthony Chu