我正在构建一个可扩展的自定义CMS解决方案,其中我有一个名为CmsDbContext的父DbContext,其中包含CMS表的实体,例如:Users表。 CmsDbContext启用了自动迁移。 我希望允许最终用户从CmsDbContext继承,以便通过添加/映射DbSet属性和自定义POCO来创建自定义的额外表/实体。
Cms需要在导出的DbContext初始化之前在PreStart中初始化他的CmsDbContext。 到目前为止一切顺利,当我初始化CmsDbContext时,表是成功创建的。 当我初始化派生的DbContext时,例如CustomCmsDbContext,成功创建了额外的表。但是,当重新启动Web应用程序时,CmsDbContext的迁移过程将擦除不属于上下文的表,并重新创建继承的CustomDbContext的表。
我知道在同一个数据库中启用自动迁移可以创建多个不相关的DbContexts,因为DbMigrationsConfiguration的ContextKey属性会。但我需要继承这里,以便允许CustomCmsDbContext上下文对CmsDbContext映射的现有表进行查询,因此两个上下文的行为类似于一个DbContext,并启用了迁移。
所以我们知道问题是父DbContext在迁移过程中删除了子DbContext的表,子DbContext在迁移过程中重新创建了丢失的表。
如何避免迁移删除不属于DbContext的表?
这是伪代码:
public class CmsDbContext: DbContext {
static CmdDbContext() {
Database.SetInitializer(new MigrateDatabaseToLatestVersion<CmsDbContext, Migrations.CmsDbContextConfiguration>());
}
public DbSet<User> Users { get; set; }
}
public class CustomCmdDbContext: CmsDbContext {
static CustomCmdDbContext() {
Database.SetInitializer(new MigrateDatabaseToLatestVersion<CustomCmdDbContext, Migrations.CustomCmdDbContext>());
}
public DbSet<CustomEntity> CustomEntities { get; set; }
}