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