EF Core 2.1.Добавить пользовательский столбец в таблицу MigrationHistory - PullRequest
0 голосов
/ 31 мая 2018

Я использую EF Core 2.1 Code-First.

SELECT * FROM [dbo].[__MigrationsHistory] возвращает таблицу из 2 столбцов

  • MigrationId
  • ProductVersion

Я ищу способ добавить еще один столбец AppliedOn, в котором будет храниться время, когда миграция действительно применялась к базе данных.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Здесь есть статья от Microsoft здесь , в которой указано, как сделать это немного более дружественным к EF способом, хотя они предлагают большую осторожность, поскольку вы можете непреднамеренно прервать миграцию.

Этостатья поддерживает только EF6.0, который может поддерживаться EF Core 2.1, но я не пробовал, поэтому я не знаю, доступен ли он вам, и статья неясна по этому поводу.

Я полностью понимаю, почему вы хотите это сделать, но вы могли бы вместо этого рассмотреть пользовательскую таблицу исправлений и вставить ее в класс Configuration.cs при создании первого кода миграции.Да, это еще один шаг, да, это не так элегантно, но это может быть безопаснее с точки зрения EF.

0 голосов
/ 31 мая 2018

Вы можете сделать это в 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()"
        );
    }
     ....
}
...