【发布时间】:2020-03-06 08:09:36
【问题描述】:
我们定期更改数据库数据(每两周至每月一次)。 通常必须使用最新的数据,但在某些特殊情况下,旧的数据是必要的。
atm 必须使用哪个版本的当前信息存储在另一个表中。
数据库看起来像这样,版本化的 Schema-Names 下有相同的表。
YYYYMMDD+Revision
myshema_202001011
table1
myshema_202002011 and so on
table1
myshema_202003011 and so on
table1
我已经构建了一个带有两个 DbContext 类的 Aspnet 核心 (2.2) 服务, 一种用于获取当前版本的静态架构,另一种用于访问这些数据的不断变化的架构。
静态 DbContext 工作正常。
问题是,即使我将不断变化的 contaxt 与 using like 一起使用,
using (var _context = new ChangingDbContext()){}
构造函数和OnConfiguring 每次都会执行,但OnModelCreating 方法只执行一次。
这会导致不更新到当前架构。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasAnnotation("ProductVersion", "2.2.6-servicing-10079");
modelBuilder.Entity<my_table>(entity =>
{
entity.HasKey(e => e.key_adr);
entity.ToTable("mytable", $"myshema{mySchemaVersion}");
});
}
有没有人知道如何获得每次执行 OnModelCreating 的“真正”新上下文? 或者也许另一种解决方案如何处理那些不断变化的架构?
【问题讨论】:
-
只是为了确认。您是说您的数据库每两周更改一次。而且您需要每 2 周更改一次 DBContext 代码?
-
是的。然后用一些修订逻辑来炸毁我们得到的原始表格更容易。
-
嗯,这是我第一次听到这个。我认为你可以为表格做动态列。我会在答案中解释更多。
标签: c# entity-framework asp.net-core ef-core-2.2