Entity Framework Code-First Migrations - Невозможно удалить ограничение, потому что оно не существует (соглашение об именах от 4.3 до 5.0)

Ранее использовал EF 4.3 и после обновления до 5.0 я обнаружил, что для индексов, ограничений FK и ограничений PK все соглашения об именах были изменены, чтобы включить dbo (например, PK_Users теперь стал PK_dbo.Users)

Теперь, когда я делаю изменения в модели, и ей нужно изменить таблицу, в которой они есть, она всегда говорит, что не может снять ограничение, потому что не может его найти.

Я просто хочу, чтобы, когда он пытается удалить ограничение / индекс / ключ, он сначала проверяет, существует ли имя, предшествующее 5.0, и, если это так, удаляет его, но все же воссоздает его, используя новые соглашения об именах 5.0.

Соглашения об именах изменились так с 4.3 до 5.0:

Первичный ключ / индексы

Old: PK_Users                    New: PK_dbo.Users

Иностранные ключи

Old: FK_Users_Roles_Role_Id      New: FK_dbo.Users_dbo.Roles_Role_Id               

Примечание: Я НЕ МОГУ просто заставить EF восстановить все таблицы, у меня есть производственные данные в этой базе данных. Я также не хочу делать это вручную для каждой таблицы с помощью пользовательских миграций.

Изменить: я нашел похожий вопросКак я могу остановить миграции Entity Framework 5, добавив dbo. в ключевые имена? но этот парень просто хотел игнорировать соглашения 5.0 и придерживаться 4.3, и это касалось только переименования таблиц. Я бы предпочел не делать этого, так как последующие версии EF могут вызвать больше изменений, которые повлияют на этот код и будут просто хлопотами по линии.

Я попытался сделать что-то в том же духе, что и ответ на вопрос:

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

И добавив его в конфиг:

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

    }

Однако ошибка все еще поражает:

dbo.Users_dbo.Departments_Department_Id 'не является ограничением. Не удалось отбросить ограничение. Смотрите предыдущие ошибки.

Я на самом деле пытался переопределить каждый член вCSharpMigrationCodeGenerator и установка точки останова в операторе возврата, и ни один из них не срабатывает. Так что, похоже, мой генератор никогда не привыкнет, не знаю, чего мне не хватает в этом.