EF: As migrações automáticas estão em execução quando desativadas

9

Estou tentando atualizar o banco de dados em um servidor de compilação e ele está falhando porque está tentando executar migrações automáticas, embora estejam desativadas. O banco de dados já existe e eu só preciso aplicar a migração mais recente. Aqui está o meu contexto:

public sealed class Configuration : DbMigrationsConfiguration<CableSenseInstanceConfiguratorContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }
}

Eu tenho um monte de arquivos de migração que eu criei manualmente, aqui está o mais recente:

public partial class Settings : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.MasterInstances", "Settings", c => c.String());
    }

    public override void Down()
    {
        DropColumn("dbo.MasterInstances", "Settings");
    }
}

Se eu atualizar manualmente o banco de dados a partir do console do gerenciador de pacotes, vejo que ele tenta executar uma migração automática (que falha porque a tabela já existe):

Applying code-based migrations: [201204200805145_NoMoreCerts, 201210311451543_SuperUsers, 201301041036414_Settings, 201301041128583_Settings2].
Applying code-based migration: 201204200805145_NoMoreCerts.
Applying automatic migration: 201204200805145_NoMoreCerts_AutomaticMigration.

Minha tabela __MigrationHistory tem apenas uma entrada para a criação inicial. Como posso impedir isso de fazer as migrações automáticas?

    
por Matt Roberts 07.01.2013 в 10:25
fonte

1 resposta

5

Confira a resposta do jjslagace aqui:

Update-Database tenta faça uma migração automática mesmo com migrações automáticas desativadas

Você está criando suas migrações manualmente. Meu palpite é que o framework de entidades quer adicionar algo que você não tem em seu script de migração, ou quer nomear colunas de maneira diferente, etc. O EF tem um cérebro, e esse cérebro é bastante simples. Ele espera que as coisas sejam de certa forma, a menos que você diga de outra forma usando fluente (não criando manualmente / alterando arquivos de migração). A partir da resposta da pergunta acima, parece que às vezes isso resulta no problema que você está vendo.

Para encurtar a história, não crie os arquivos de migração manualmente. Em vez disso, execute o comando add-migrations. Isso criará a migração para você e você poderá ver o que a EF espera fazer antes de ser aplicada ao seu banco de dados (porque às vezes é estúpido). Se você precisar substituir o que a EF está gerando, adicione um mapeamento fluente na sua classe DBContext substituindo OnModelCreating. Em seguida, basta executar a migração adicional novamente com a opção -force. Aqui está uma boa referência para usar a API do Fluent para custimizar os mapeamentos do EF. Enxague e repita até obter a migração que está procurando e, em seguida, executar o banco de dados de atualização.

Espero que ajude!

    
por Ben Tidman 07.01.2013 / 13:59
fonte