我有两个数据库。当我对我的一个 dbcontext 进行更改(添加一个新的 DbSet)时,它应该在运行我的 web 应用程序时自动将更改应用到正确的数据库。所以应该添加新表。因此我添加了两个配置类。每个数据库/上下文一个。
但是,使用下面这样的初始化程序,更改总是应用于第二个上下文/数据库。因为这是配置的最新初始化程序。
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");
}
}
所以我的问题是实体框架是否支持使用初始化器的多个上下文的迁移?如果没有,当迁移可以处理多个上下文时,这将是一个很好的功能。