管理多个继承的 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" 迁移,然后只在那个上下文上使用迁移。
这意味着您将需要一个包含所有表的上下文,即使它仅用于迁移。
我在不同的 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" 迁移,然后只在那个上下文上使用迁移。
这意味着您将需要一个包含所有表的上下文,即使它仅用于迁移。