我在不同的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是不是它的业务?
答案 0 :(得分:1)
仅在SpecializedContext上使用迁移。当我有多个共享表的上下文时,我决定哪个上下文需要&#34;拥有&#34;迁移并只使用该迁移。
这意味着您将需要一个包含所有表的Context,即使它仅用于迁移。