EF Core 2.1。将自定义列添加到MigrationHistory表

时间:2018-05-31 14:42:27

标签: c# asp.net-core .net-core asp.net-core-2.1 entity-framework-core-2.1

我使用EF Core 2.1 Code-First。

SELECT * FROM [dbo].[__MigrationsHistory]从2列

返回表格
  • MigrationId
  • 的ProductVersion

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

2 个答案:

答案 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的角度来看可能更安全。