管理多个继承的 DBContext

Managing multiple inherited DBContexts

我在不同的 dll 中使用多个 DbContext 对象,并试图找到解决 ModelBuilder 问题的方法。

目前上下文指定如下:

public class BaseContext : DBContext {
  public DbSet<EntityClass1> Entities1 { get; set; }
}

public class SpecializedContext1 : BaseContext {
  public DbSet<EntityClass2> Entities2 { get; set; }
}

public class EntityClass1 {
  public int Id { get; set; }
}

public class Entities2 {
  public int Id { get; set; }
  public virtual EntityClass1 { get; set; }
}

上下文在不同的程序集中定义。

如果我 运行 为 BaseContext 添加迁移,一切都很好。 之后,我 运行 更新数据库并在数据库中创建 BaseContext。

然后我想 运行 对 SpecializedContext 进行同样的操作。这目前不起作用,因为 SC 也尝试创建 BaseContext 的表。

连接字符串被配置为使用相同的数据库,并且 Update-Database 访问正确的数据库,但它总是尝试添加 BaseContext-Tables(更糟糕的是,如果我在 BaseContext 中更改某些内容,它会尝试反映变化)。

我试图在 OnModelBuilding-Method 中忽略 BaseContext 的 类,但这破坏了 SpecializedContext 中的外键。

有什么方法可以告诉 ModelBuilder,BaseContext 是 none 它的业务吗?

仅在 SpecializedContext 上使用迁移。当我有多个上下文共享表时,我会决定哪个上下文需要 "own" 迁移,然后只在那个上下文上使用迁移。

这意味着您将需要一个包含所有表的上下文,即使它仅用于迁移。