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, pode ser interessante personalizar essa tabela para atender melhor às suas necessidades.

Importante

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

Nome do esquema e da tabela

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

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

Outras alterações

Para configurar outros aspectos da tabela, altere e substitua o serviço IHistoryRepository específico do provedor. Veja 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 poderá 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");
    }
}