Migração do Code-First do Entity Framework - Não é possível eliminar a restrição porque ela não existe (convenção de nomenclatura de 4.3 para 5.0)

Anteriormente, estava usando o EF 4.3 e, ao atualizar para 5.0, descobri que os índices, as restrições FK e as restrições PK tiveram suas convenções de nomenclatura alteradas para incluir dbo (por exemplo, PK_Users agora se tornou PK_dbo.Users)

Agora, toda vez que eu faço uma mudança no modelo e ele precisa mudar uma tabela que contém isso, ele sempre diz que não pode eliminar a restrição porque não consegue encontrá-la.

Eu apenas quero que quando ele tenta eliminar uma restrição / índice / chave primeiro verifique se existe uma nomenclatura pré-5.0 e, se for, solte-a, mas ainda a recrie usando as novas convenções de nomenclatura 5.0.

As convenções de nomenclatura mudaram assim de 4.3 para 5.0:

Chave primária / índices

Old: PK_Users                    New: PK_dbo.Users

Chaves Estrangeiras

Old: FK_Users_Roles_Role_Id      New: FK_dbo.Users_dbo.Roles_Role_Id               

Nota: NÃO POSSO simplesmente ter o EF regenerar todas as tabelas, tenho dados de produção neste banco de dados. Eu também não quero ter que fazer isso manualmente para cada tabela usando migrações personalizadas.

Edit: eu encontrei uma pergunta semelhanteComo posso parar as migrações do Entity Framework 5 adicionando o dbo. em nomes-chave? mas esse cara só queria ignorar as convenções 5.0 e ficar com o 4.3, e tratava apenas de renomear tabelas. Eu preferiria não fazer isso, pois versões subsequentes do EF podem causar mais alterações que afetariam esse código e seriam apenas um aborrecimento.

Eu tentei fazer algo na mesma linha que a resposta postada:

public class CodeMigrator : CSharpMigrationCodeGenerator
{
    protected override void Generate(
        DropIndexOperation dropIndexOperation, IndentedTextWriter writer)
    {
        dropIndexOperation.Name = StripDbo(dropIndexOperation.Name);
        base.Generate(dropIndexOperation, writer);
    }

    protected override void Generate(DropForeignKeyOperation dropForeignKeyOperation, IndentedTextWriter writer)
    {
        dropForeignKeyOperation.Name = StripDbo(dropForeignKeyOperation.Name);
        base.Generate(dropForeignKeyOperation, writer);
    }

    protected override void Generate(DropPrimaryKeyOperation dropPrimaryKeyOperation, IndentedTextWriter writer)
    {
        dropPrimaryKeyOperation.Name = StripDbo(dropPrimaryKeyOperation.Name);
        base.Generate(dropPrimaryKeyOperation, writer);
    }

    // TODO: Override other Generate overloads that involve table names

    private string StripDbo(string name)
    {
        return name.Replace("dbo.", "");
    }
}

E adicionando-o à configuração:

public Configuration()
    {
        CodeGenerator = new CodeMigrator();
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = false;

    }

No entanto, o erro ainda é atingido:

dbo.Users_dbo.Departments_Department_Id 'não é uma restrição. Não foi possível eliminar a restrição. Veja os erros anteriores.

Eu realmente tentei substituir cada membro noCSharpMigrationCodeGenerator e definindo um ponto de interrupção na instrução de retorno, e nenhum deles foi atingido. Então parece que meu gerador personalizado nunca é usado, não tenho certeza do que estou perdendo com isso.

questionAnswers(1)

yourAnswerToTheQuestion