簡體   English   中英

EF Core 2.1。將自定義列添加到MigrationHistory表

[英]EF Core 2.1. Add custom column to MigrationHistory table

我使用EF Core 2.1 Code-First。

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

  • MigrationId
  • 的ProductVersion

我正在尋找一種方法來添加一個AppliedOn列,它將存儲遷移實際應用於數據庫的時間。

你可以在SQL中做到這一點:

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

當EF將遷移應用於數據庫時,它會在表__MigrationHistory插入一行。 此SQL腳本在getDate() AppliedOn列添加為默認值。 插入行時,該列將包含此插入的當前日期時間。

或者,您可以使用EF Migration執行相同的操作:

通過添加到第一次遷移(或新遷移):

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

有來自微軟的文章在這里是指如何在一個稍微EF友好的方式做到這一點,盡管他們提出了很多特別小心,因為你可能無意中打破遷移。

本文僅支持EF6.0以上,EF Core 2.1 可能支持,但我沒有嘗試過,所以我不知道您是否可以使用它,文章也不清楚。

我完全明白你想要這樣做的原因,但你可以考慮使用自定義補丁表,並在創建代碼第一次遷移時從Configuration.cs類插入。 是的,這是另一個步驟,是的,它不是那么優雅,但從EF的角度來看可能更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM