如何为 Code First DbContext 动态设置架构?
How can I set the schema dynamically for a Code First DbContext?
我有一个 EF6 数据库优先应用程序,它使用从 dbo 模式生成到 edmx 的表。
为了更新某些相互协同工作的大型定价表,我根据日期在新模式中创建新表,然后在事务中,将当前表移动到备份模式,然后移动新表表到 dbo 模式。这是使用通过读取 edmx 文件和更改模式创建的新 MetadataWorkspace 实现的,并允许我有两个 DbContext,其中一个使用 dbo 模式中的现有数据,另一个使用新模式中的新表。并且非常适合数据库优先!
See this SO article.
对于 CodeFirst,可以在 OnModelCreating 中设置 modelBuilder.HasDefaultSchema,但随后 DbContext 将被锁定,并且不会为新的 DbContext 实例再次调用 OnModelCreating,因此无论设置什么架构现在都用于所有此类应用程序期间的 DbContexts。
我的问题是 – 如何使用 CodeFirst 动态更改 DbContext,我可以有两个 DbContext,每个使用不同的架构?我不能只定义两个派生的 DbContext 类,因为模式名称是动态的。
显然,这只能做一次,因为 DbContext 被锁定并保留模式名称。我计划通过保持第二个模式名称固定而不是动态来满足这一需求。如果 "clone" 锁定的 DbContext 可以使用新的模式名称,那会很好,但目前我发现无论如何都不可能。正在关闭。
您可以在 EF6 中动态设置架构。不过,您需要调整初始化 DBContext 的方式。
我在这里找到了大部分我要找的东西:
Multi-Tenant With Code First EF6
我有一个 EF6 数据库优先应用程序,它使用从 dbo 模式生成到 edmx 的表。
为了更新某些相互协同工作的大型定价表,我根据日期在新模式中创建新表,然后在事务中,将当前表移动到备份模式,然后移动新表表到 dbo 模式。这是使用通过读取 edmx 文件和更改模式创建的新 MetadataWorkspace 实现的,并允许我有两个 DbContext,其中一个使用 dbo 模式中的现有数据,另一个使用新模式中的新表。并且非常适合数据库优先! See this SO article.
对于 CodeFirst,可以在 OnModelCreating 中设置 modelBuilder.HasDefaultSchema,但随后 DbContext 将被锁定,并且不会为新的 DbContext 实例再次调用 OnModelCreating,因此无论设置什么架构现在都用于所有此类应用程序期间的 DbContexts。
我的问题是 – 如何使用 CodeFirst 动态更改 DbContext,我可以有两个 DbContext,每个使用不同的架构?我不能只定义两个派生的 DbContext 类,因为模式名称是动态的。
显然,这只能做一次,因为 DbContext 被锁定并保留模式名称。我计划通过保持第二个模式名称固定而不是动态来满足这一需求。如果 "clone" 锁定的 DbContext 可以使用新的模式名称,那会很好,但目前我发现无论如何都不可能。正在关闭。
您可以在 EF6 中动态设置架构。不过,您需要调整初始化 DBContext 的方式。 我在这里找到了大部分我要找的东西: Multi-Tenant With Code First EF6