Jon*_*ora 5 c# entity-framework entity-framework-migrations
我正在构建一个可扩展的自定义 CMS 解决方案,其中我有一个名为 CmsDbContext 的父 DbContext,其中包含 CMS 表的实体,例如:用户表。CmsDbContext 已启用自动迁移。我希望允许最终用户从 CmsDbContext 继承,以便通过添加/映射 DbSet 属性和自定义 POCO 创建自定义额外表/实体。
Cms 需要在派生的 DbContext 初始化之前在 PreStart 中初始化他的 CmsDbContext。到目前为止一切顺利,当我初始化 CmsDbContext 时,表已成功创建。当我初始化派生的 DbContext 例如 CustomCmsDbContext 时,额外的表被成功创建。但是当 Web 应用程序重新启动时,CmsDbContext 的迁移过程会擦除不属于上下文的表,并重新创建继承的 CustomDbContext 的表。
我知道可以创建多个不相关的 DbContext,并在同一数据库中启用自动迁移,因为 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; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2604 次 |
| 最近记录: |