我在一个项目中有两个 DbContext,它们都映射到 2 个不同的架构。我已将每个 DbContext 的 MigrationHistoryTable 设置为存储在每个相应的架构中。
services.AddDbContext<Context1>(options =>
{
options.UseNpgsql(dataSource, sqlOptions =>
{
sqlOptions.MigrationsHistoryTable("__EFMigrationsHistory", "Schema1");
sqlOptions.MigrationsAssembly(Assembly.GetAssembly(typeof(Context1))?.FullName);
});
});
services.AddDbContext<Context2>(options =>
{
options.UseNpgsql(dataSource, sqlOptions =>
{
sqlOptions.MigrationsHistoryTable("__EFMigrationsHistory", "Schema2");
sqlOptions.MigrationsAssembly(Assembly.GetAssembly(typeof(Context2))?.FullName);
});
});
我想为每个 dbcontext 设置 2 个不同的迁移。问题是,当我为任何 dbcontext 添加迁移(例如:
add-migration InitialMigration -c Context1
)时,它会在 Migrations
下创建一个子文件夹,其中包含数据库上下文的名称,并包含两个上下文更改。
有没有办法在
Context1
下进行 Migrations/Context1Db
迁移,并在 Context2
下进行
Migrations/Context2Db
迁移,而无需创建两个不同的迁移程序集?
问题是实体配置在 dbcontext 中注册为
modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
,它从两个 dbContext 中获取所有实体配置。
解决方案是手动指定实体配置,如
modelBuilder.ApplyConfiguration(new XyzEntityTypeConfiguration());