gpt4 book ai didi

c# - 具有从同一数据库中的基础 DbContexts 进行多次迁移和继承的 Entity Framework

转载 作者:太空狗 更新时间:2023-10-30 01:19:25 25 4
gpt4 key购买 nike

我正在构建一个可扩展的自定义 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; }
}

最佳答案

This blog post from Rowan Miller描述了一个非常相似的场景:让客户向上下文添加/编辑用户定义的列或表。

关于c# - 具有从同一数据库中的基础 DbContexts 进行多次迁移和继承的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22943043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com