【问题标题】:Way to inherit schema from diffrent DbContext从不同 DbContext 继承模式的方法
【发布时间】:2020-11-13 08:09:05
【问题描述】:

我正在使用多租户应用程序,因此必须了解上下文。

我有角色 db 架构(我们称之为 sampleDB),它有自己的 DbContext。我在这个数据库上使用迁移。这个数据库是每个客户的数据库应该是什么样子的例子。 每个客户都有自己的 sampleDB 版本和对他来说唯一的数据。我已经定义了 ClientDbContext,它是在客户需要访问他的数据库时根据他的唯一名称创建的。他的数据库的模式更新出现问题。我不想为每个客户手动执行此操作,因为我可以拥有很多客户。

创建 ClientDbContext 后,我​​想运行应用于 SampleDb 的迁移(ClientDb 和 SampleDb 的架构必须相同)。我无法手动执行此操作(更新数据库),因为客户端数据库的连接字符串在运行时是已知的。 ClientDbContext 中不需要迁移历史记录,但我无法在运行时更新他的 Db。 我已经定义了方法 wchi 运行迁移:

        public async Task StartMigrationAsync()
    {
        await this.Database.MigrateAsync();
    }

我无法为该方法定义迁移文件夹。

我不知道如何在不丢失数据的情况下解决此问题。

【问题讨论】:

    标签: .net entity-framework-core dbcontext


    【解决方案1】:

    动态运行迁移是可能的,但不鼓励。相反,请始终创建迁移脚本,检查它(备份目标数据库等),然后应用该脚本。

    对于多租户场景,您可以保留一份完整的迁移脚本。创建新租户时,只需运行 SQL 命令创建新数据库,然后将脚本应用到新数据库的上下文/连接中。

    【讨论】:

      【解决方案2】:

      他们解决了一个问题: 迁移系统主要是开发时间所必需的,所以如果出现问题,不会有后果(除了时间:P)

      应用程序中使用的每个模型都包含有ClientModel:

      public class ClientModel<TModel>{
          string dbName
          TModel Model
      }
      

      然后我只是根据提供的 dbName 创建 db contextext 实例。 迁移是基于我们的 sampleClientDb 创建的,它包含架构并用作客户端数据库的参考点。 迁移通过到达我们的 api 中的端点来运行,该端点触发方法 .MigrateAsync()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多