管理多个继承的DBContexts

时间:2015-01-20 10:57:26

标签: ef-code-first entity-framework-6 ef-migrations

我在不同的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运行Add-Migation,一切都很好。 之后,我运行Update-Database,并在数据库中创建BaseContext。

然后我想为SpecializedContext运行相同的操作。这当前不起作用,因为SC也试图创建BaseContext的表。

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

我试图在OnModelBuilding - Method中忽略BaseContext的类,但这打破了来自SpecializedContext的ForeignKeys。

有没有办法告诉ModelBuilder,BaseContext是不是它的业务?

1 个答案:

答案 0 :(得分:1)

仅在SpecializedContext上使用迁移。当我有多个共享表的上下文时,我决定哪个上下文需要&#34;拥有&#34;迁移并只使用该迁移。

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