efcore /临时表迁移处理

时间:2020-02-27 18:49:57

标签: sql-server .net-core ef-core-2.0 temporal-tables

我和我的团队在后端开发中使用.netcore / ef core / mssql。 客户的要求之一是提供有关数据更改的历史记录。 我们的第一种方法是查询时态表中的历史相关主题。 尽管我们可以弄清楚如何实现和查询时态表,但我们还是有一些 有关在数据库模式更改中使用临时表的担忧。我们的主要关注点是,几乎每种迁移上下方法都必须通过大量的手写SQL代码进行扩展。是否有人在生产/开发中使用时态表,并且可以提供有关迁移处理的见解?

2 个答案:

答案 0 :(得分:0)

您知道吗?

我现在正在使用带有efcore 3的时态表在表上实现历史记录。我偶然发现this博客文章中描述了如何做到这一点。通过为MigrationBuilder实现通用的扩展方法,您可以在创建新迁移时手动添加时态表。

MigrationBuilderExtensions.cs

public static void AddTemporalTableSupport(this MigrationBuilder builder, string tableName, string historyTableSchema)
{
    builder.Sql($@"ALTER TABLE {tableName} ADD
                SysStartTime datetime2(0) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
                SysEndTime datetime2(0) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
                PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime);");
    builder.Sql($@"ALTER TABLE {tableName}
                SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = {historyTableSchema}.{tableName} ));");
}

,然后在迁移文件的底部Up()方法。

protected override void Up(MigrationBuilder migrationBuilder)
{
   // ** Migration code **

   migrationBuilder.Sql("CREATE SCHEMA History");
   migrationBuilder.AddTemporalTableSupport("Products", "History");
   migrationBuilder.AddTemporalTableSupport("ProductDetails", "History");
}

答案 1 :(得分:0)

你试过吗?

https://github.com/terryfkjc/EntityFrameworkCore.SqlServer.TemporalTable

这个扩展可以支持

  1. 从 Linq 创建时态查询
  2. 为时态表添加迁移。(使用添加迁移、脚本迁移)