3

我使用 EF Core 2.1 代码优先。

SELECT * FROM [dbo].[__MigrationsHistory]从 2 列返回表

  • 迁移 ID
  • 产品版本

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

4

2 回答 2

7

你可以在 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()"
        );
    }
     ....
}
于 2018-05-31T14:46:57.410 回答
0

Microsoft here有一篇文章指出了如何以稍微更 EF 友好的方式执行此操作,尽管他们建议您非常小心,因为您可能会无意中破坏迁移。

本文仅支持 EF6.0 及更高版本,可能受 EF Core 2.1 支持,但我没有尝试过,所以我不知道它是否可供您使用,并且文章对此也不清楚。

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

于 2018-05-31T15:07:43.700 回答