Несколько контекстов БД в одной БД и приложении в EF 6 и первых миграциях кода
Я новичок в Entity Framework. Я пытаюсь настроить приложение MVC, которое использует EF 6. Я использую код первой миграции. Я использую области в приложении и хотел бы иметь разные DbContexts в каждой области, чтобы разбить его. Я знаю, что EF 6 имеет ContextKey, но я не могу найти полную информацию о том, как его использовать. В настоящее время я могу использовать миграции только один контекст за раз.
может ли кто-нибудь привести пример с достаточной детализацией для нового человека, чтобы EF, как я, понимал и использовал.
1 ответ:
Entity Framework 6 добавлена поддержка нескольких
DbContext
s путем добавления-ContextTypeName
и-MigrationsDirectory
флаги. Я просто запустил команды в консоли диспетчера пакетов и вставил вывод ниже...если у вас есть 2
DbContext
s в вашем проекте, и вы запускаетеenable-migrations
, вы получите сообщение об ошибке (как вы, наверное, уже знаете):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.
, так что
enable-migrations
в каждомDbContext
отдельно. И вы должны указать папку для каждогоConfiguration.cs
файл должен быть сгенерированный...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.
чтобы добавить миграции для каждого
DbContext
, вы делаете это так, указав полное имя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.
а ты беги
update-database
таким же образом: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.
надеюсь, что это помогает.