每个 DbContext 的迁移集

问题描述 投票:0回答:1

我在一个项目中有两个 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 迁移,而无需创建两个不同的迁移程序集

entity-framework entity-framework-core
1个回答
0
投票

问题是实体配置在 dbcontext 中注册为

modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
,它从两个 dbContext 中获取所有实体配置。

解决方案是手动指定实体配置,如

modelBuilder.ApplyConfiguration(new XyzEntityTypeConfiguration());

© www.soinside.com 2019 - 2024. All rights reserved.