英孚核心 2.1。将自定义列添加到 MigrationHistory table

EF Core 2.1. Add custom column to MigrationHistory table

我使用 EF Core 2.1 Code-First。

SELECT * FROM [dbo].[__MigrationsHistory] returns table 来自 2 列

我正在寻找一种方法来添加一个列AppliedOn,它将存储迁移真正应用到数据库的时间。

您可以在 SQL 中做到这一点:

alter table [dbo].[__MigrationHistory] add AppliedOn Datetime default getdate()

当 EF 向数据库应用迁移时,它会在 table __MigrationHistory 中插入一行。此 SQL 脚本添加列 AppliedOn,默认值为 getDate()。插入一行时,该列将包含此插入的当前日期时间。

或者,您可以使用 EF 迁移执行相同的操作:

通过添加到第一次迁移(或新迁移):

public partial class Intial : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AddColumn<DateTime>(
            name: "AppliedOnUtc",
            schema: "Conversations",
            table: "__MigrationsHistory",                
            defaultValueSql: "GETUTCDATE()"
        );
    }
     ....
}

Microsoft 的一篇文章 here 指出如何以对 EF 更友好的方式执行此操作,尽管它们建议您多加小心,因为您可能会无意中中断迁移。

本文仅支持 EF6.0 以上版本,可能 EF Core 2.1 支持,但我没有尝试过,所以我不知道它是否适用于您和这篇文章对此不清楚。

我完全明白你为什么要这样做,但你可以考虑使用自定义补丁 table 并在你首先创建代码时从 Configuration.cs class 插入它移民。是的,这是另一个步骤,是的,它不是那么优雅,但从 EF 的角度来看它可能更安全。