为 DbContext B 创建迁移会为 DbContext B 和 A 创建表

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

我有一个项目,有 2 个 DbContext 及其各自的实体。

DbContextA 来自旧版 SQLServer,是一种“数据库优先”方法。

DbContextB 来自新的 Postgres 服务器,并以“代码优先”的方式使用。

两个 DbContext 都在启动时通过以下方式注册:

builder.Services.AddDbContext<DbContextA>(o => o.UseSqlServer(builder.Configuration.GetConnectionString("database-a")));
builder.Services.AddDbContext<DbContextB>(o => o.UseNpgsql(builder.Configuration.GetConnectionString("database-b")));

当我使用以下命令生成迁移时:

dotnet ef migrations add Initial -s .\src\API\API.csproj -p .\src\DAL\DAL.csproj --context DbContextB --output-dir DbContextBMigrations

我得到了一个迁移,它将在同一数据库中创建两个 DbContext 中的所有表。我不知道为什么会发生这种情况。如果没有在命令中指定 DbContext,我会收到一条错误消息,指出我需要指定一个(这完全有道理)。我不明白为什么它从 DbContextA 中获取 DbSet。

c# .net-core entity-framework-core
1个回答
0
投票
从阅读对您问题的评论来看,您似乎正在使用“ApplyConfigurationsFromAssembly”来检测您的实体配置。

如果这些实体配置位于同一个项目中,则两个 DbContext 将加载所有实体配置。有两个选项可以解决您的问题:

    移动两个不同项目中每个 DbContext 的实体配置,以便它们不在同一程序集中
  1. 在 DbContext 的 OnModelCreating 方法中显式调用每个实体配置
© www.soinside.com 2019 - 2024. All rights reserved.