Compartilhar via


Tabela de histórico de migrações personalizadas

Por padrão, o EF Core controla quais migrações foram aplicadas ao banco de dados gravando-as em uma tabela chamada __EFMigrationsHistory. Por vários motivos, talvez você queira personalizar essa tabela para atender melhor às suas necessidades.

Importante

Se você personalizar a tabela de histórico de migrações depois de aplicar migrações, será responsável por atualizar a tabela existente no banco de dados.

Esquema e nome da tabela

Você pode alterar o esquema e o nome da tabela usando o MigrationsHistoryTable() método em OnConfiguring() (ou ConfigureServices() em ASP.NET Core). Aqui está um exemplo usando o provedor EF Core do SQL Server.

protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseSqlServer(
        _connectionString,
        x => x.MigrationsHistoryTable("__MyMigrationsHistory", "mySchema"));

Outras alterações

Para configurar aspectos adicionais da tabela, sobreponha e substitua o serviço específico IHistoryRepository do provedor. Aqui está um exemplo de alteração do nome da coluna MigrationId para Id no SQL Server.

protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options
        .UseSqlServer(_connectionString)
        .ReplaceService<IHistoryRepository, MyHistoryRepository>();

Aviso

SqlServerHistoryRepository está dentro de um namespace interno e pode mudar em versões futuras.

internal class MyHistoryRepository : SqlServerHistoryRepository
{
    public MyHistoryRepository(HistoryRepositoryDependencies dependencies)
        : base(dependencies)
    {
    }

    protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
    {
        base.ConfigureTable(history);

        history.Property(h => h.MigrationId).HasColumnName("Id");
    }
}