0

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

4

3 回答 3

2

EF Core 6.0 最需要的功能是支持 SQL Server 时态表。从 RC1 开始,时态表支持现在包含在 EF Core 中。

在这里阅读更多。

于 2021-10-12T11:40:39.513 回答
0

你想清楚了吗?

我现在正在使用带有 efcore 3 的临时表在我们的表上实现历史记录。我偶然发现了这篇博客文章,描述了它是如何完成的。通过为 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");
}
于 2020-09-08T08:25:57.507 回答
0

你试过这个吗?

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

这个扩展可以支持

  1. 从 Linq 创建时间查询
  2. 为时态表添加迁移。(使用添加迁移、脚本迁移)
于 2021-01-26T11:23:12.953 回答