【问题标题】:How can I set the schema dynamically for a Code First DbContext?如何为 Code First DbContext 动态设置架构?
【发布时间】:2016-03-23 23:05:38
【问题描述】:

我有一个 EF6 Database First 应用程序,它使用从 dbo 模式生成到 edmx 的表。

为了更新某些相互配合的大型定价表,我根据日期在新模式中创建新表,然后在事务中,将当前表移动到备份模式,并将新表移动到dbo 架构。这是使用通过读取 edmx 文件和更改架构创建的新 MetadataWorkspace 实现的,并允许我拥有两个 DbContext,其中一个使用 dbo 架构中的现有数据,另一个使用新架构中的新表。并且非常适合数据库优先! See this SO article.

对于 CodeFirst,可以在 OnModelCreating 中设置 modelBuilder.HasDefaultSchema,但随后 DbContext 被锁定,并且不会为新的 DbContext 实例再次调用 OnModelCreating,因此现在设置的任何模式都将在持续时间内用于所有此类 DbContext应用程序。

我的问题是——如何使用 CodeFirst 动态更改 DbContext,我可以有两个 DbContext,每个都使用不同的模式?我不能只定义两个 DbContext 派生类,因为模式名称是动态的。

【问题讨论】:

    标签: ef-code-first entity-framework-6 database-schema


    【解决方案1】:

    显然,这只能完成一次,因为 DbContext 被锁定并保留了架构名称。我计划通过保持第二个模式名称固定而不是动态来满足这一需求。如果可以用新的模式名称“克隆”锁定的 DbContext 会很好,但目前我发现无论如何都不可能。结束。

    【讨论】:

      【解决方案2】:

      您可以在 EF6 中动态设置架构。不过,您需要调整初始化 DBContext 的方式。 我在这里找到了我想要的大部分内容: Multi-Tenant With Code First EF6

      【讨论】:

      • Thx 但这只能执行一次,然后锁定 DbContext,并且不会在具有不同架构名称的新实例上调用 OnModelCreating。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多