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