我正在构建一个可扩展的自定义CMS解决方案,其中有一个名为CmsDbContext的父DbContext,其中包含CMS表的实体,例如:Users表。 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; }
}
最佳答案
ojita描述了一种非常相似的场景:让客户在上下文中添加/编辑用户定义的列或表。
关于c# - 在同一数据库中具有从基础DbContext进行多次迁移和继承的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22943043/