У меня есть две базы данных. Когда я вношу изменения в один из моих dbcontext (добавляя новый DbSet), он должен автоматически применять изменения к правильным базам данных при запуске моего веб-приложения. Поэтому следует добавить новую таблицу. Поэтому я добавил два класса конфигурации. Один для каждой базы данных/контекста.Entity Framework Автоматическая миграция нескольких контекстов
Однако использование инициализаторов, подобных приведенным ниже, всегда применяется ко второму контексту/базе данных. Потому что это последний инициализатор настроен.
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DomainReadModelContext, DomainConfiguration>());
Database.SetInitializer(new MigrateDatabaseToLatestVersion<WebsiteReadModelContext, WebsiteConfiguration>());
Я также попробовал его в web.config
<contexts>
<context type="Domain.ReadModels.DomainReadModelContext, Domain.ReadModels">
<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Domain.ReadModels.DomainReadModelContext, Domain.ReadModels], [Website.Migrations.Domain.DomainConfiguration, Website-WebAppMainModule, Version=1.0.0.0, Culture=neutral]], EntityFramework" />
</context>
<context type="Website.ReadModels.WebsiteReadModelContext, Website.ReadModels">
<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Website.ReadModels.WebsiteReadModelContext, Website.ReadModels], [Website.Migrations.Website.WebsiteConfiguration, Website-WebAppMainModule, Version=1.0.0.0, Culture=neutral]], EntityFramework" />
</context>
</contexts
При применении изменений с помощью менеджера пакетов он работает, как это должно быть. Таблица добавляется в мою базу данных домена.
Update-Database -config DomainConfiguration
Это потому, что это не поддерживается или я делаю это неправильно? Теперь он работает только для последнего зарегистрированного инициализатора.
Для обновления я выполнил миграцию с помощью команды Add-Migration в диспетчере пакетов.
Add-Migration AddUniquePersonReadModelMigration -config DomainConfiguration
Этот сгенерированный следующий класс для меня.
public partial class AddUniquePersonReadModelMigration : DbMigration
{
public override void Up()
{
CreateTable(
"UniquePersonReadModels",
c => new
{
Id = c.Guid(nullable: false, identity: true),
PersonId = c.Guid(nullable: false),
DisplayName = c.String(maxLength: 128),
})
.PrimaryKey(t => t.Id)
.Index(p => p.PersonId)
.Index(p => p.DisplayName, true);
}
public override void Down()
{
DropIndex("UniquePersonReadModels", new[] { "PersonId" });
DropIndex("UniquePersonReadModels", new[] { "DisplayName" });
DropTable("UniquePersonReadModels");
}
}
Так что мой вопрос заключается в том, поддерживает ли сущность framework миграции для нескольких контекстов с использованием инициализаторов? В противном случае это была бы приятная функция, когда миграции можно было бы обрабатывать для нескольких контекстов.
Я использую разные базы данных. Установите оба инициализатора, но каким-то образом таблица добавляется в мой сайтReadmodelContext и его следует добавить в базу данных domainreadmodelcontext. –
инициализаторы установлены в App_start global.asax. Веб-сайт сначала попадает на сайтReadmodelContext ...Domainreadmodelcontext попадает только при внесении изменений –
Тогда это звучит как ошибка. Если бы вы могли создать репродукцию и файл с ошибкой в CodePlex (http://entityframework.codeplex.com/workitem/list/basic), это было бы здорово. –