Entity Framework Code-First Migrations: no se puede eliminar la restricción porque no existe (convención de denominación de 4.3 a 5.0)

Anteriormente estaba utilizando EF 4.3 y al actualizar a 5.0, descubro que los índices, las restricciones de FK y las restricciones de PK han cambiado sus convenciones de nombres para incluir dbo (por ejemplo, PK_Users ahora se ha convertido en PK_dbo.Users)

Ahora, cuando hago un cambio en el modelo y necesita cambiar una tabla que tiene estos, siempre dice que no puede eliminar la restricción porque no puede encontrarla.

Solo lo quiero para que cuando intente descartar una restricción / índice / clave, primero verifique si existe el nombre pre-5.0 y, si es así, descartarlo, pero aún así volver a crearlo usando las nuevas convenciones de nomenclatura 5.0.

Las convenciones de nomenclatura cambiaron así de 4.3 a 5.0:

Clave primaria / Índices

Old: PK_Users                    New: PK_dbo.Users

Llaves extranjeras

Old: FK_Users_Roles_Role_Id      New: FK_dbo.Users_dbo.Roles_Role_Id               

Nota: NO PUEDO simplemente tener EF regenerar todas las tablas, tengo datos de producción en esta base de datos. Tampoco quiero tener que hacer esto manualmente para cada tabla usando migraciones personalizadas.

Edit: encontré una pregunta similar¿Cómo puedo detener las migraciones de Entity Framework 5 agregando dbo? en nombres clave? pero este tipo solo quería ignorar las convenciones 5.0 y atenerse a 4.3, y solo se ocupaba del cambio de nombre de la tabla. Prefiero no hacerlo, ya que las versiones posteriores de EF pueden causar más cambios que podrían afectar este código y simplemente ser una molestia en la línea.

Intenté hacer algo en el mismo sentido que la respuesta publicada:

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.", "");
    }
}

Y añadiéndolo a la configuración:

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

    }

Sin embargo, el error sigue golpeando:

dbo.Users_dbo.Departments_Department_Id 'no es una restricción. No se pudo quitar la restricción. Ver errores anteriores.

En realidad traté de anular todos los miembros en elCSharpMigrationCodeGenerator y establecer un punto de interrupción en la declaración de retorno, y ninguno de ellos golpeó. Así que parece que mi generador personalizado nunca se usa, no estoy seguro de lo que me estoy perdiendo con eso.

Respuestas a la pregunta(1)

Su respuesta a la pregunta