我使用 EF Core 2.1 代码优先。
SELECT * FROM [dbo].[__MigrationsHistory]
从 2 列返回表
- 迁移 ID
- 产品版本
我正在寻找一种方法来添加一个多列AppliedOn
,该列将存储迁移真正应用于数据库的时间。
我使用 EF Core 2.1 代码优先。
SELECT * FROM [dbo].[__MigrationsHistory]
从 2 列返回表
我正在寻找一种方法来添加一个多列AppliedOn
,该列将存储迁移真正应用于数据库的时间。
你可以在 SQL 中做到这一点:
alter table [dbo].[__MigrationHistory] add AppliedOn Datetime default getdate()
当 EF 向数据库应用迁移时,它会在表中插入一行__MigrationHistory
。此 SQL 脚本在 中添加AppliedOn
具有默认值的列getDate()
。当插入一行时,该列将包含此插入的当前日期时间。
或者,您可以使用 EF Migration 做同样的事情:
通过添加到第一个迁移(或新迁移):
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 支持,但我没有尝试过,所以我不知道它是否可供您使用,并且文章对此也不清楚。
我完全明白您为什么要这样做,但是您可以考虑使用自定义补丁表,并在创建代码首次迁移时从 Configuration.cs 类插入其中。是的,这是另一个步骤,是的,它没有那么优雅,但从 EF 的角度来看它可能更安全。