我使用EF Core 2.1 Code-First。
SELECT * FROM [dbo].[__MigrationsHistory]
从2列
我正在寻找一种方法来添加一个列AppliedOn
,它将存储迁移实际应用于数据库的时间。
答案 0 :(得分:6)
您可以在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()"
);
}
....
}
答案 1 :(得分:0)
有一篇来自微软here的文章指出了如何以稍微更加EF友好的方式做到这一点,尽管他们提出了很多谨慎,因为你可能会无意中破坏迁移。
本文仅支持EF6.0以上,其中可能支持EF Core 2.1但我没有尝试过,所以我不知道它是否可供您使用且文章不清楚那。
我完全明白为什么要这样做,但您可以考虑使用自定义补丁表,并在创建代码首次迁移时从Configuration.cs类插入。是的,这是另一个步骤,是的,它不是那么优雅,但从EF的角度来看可能更安全。