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