Entity Framework 4.3.1 Миграции - включение автоматической миграции и одновременного создания новой базы данных

Я уже некоторое время играл с миграциями Entity Framework 4.3, но у меня возникли проблемы с достижением следующего поведения: в случае, если мой код работает в существующей базе данных, я хочу, чтобы база данных была автоматически перенесена в последнюю версию, но в случае, если база данных не существует, база данных должна создаваться автоматически из миграций.

Я думаю, что проблема связана с первой созданной вами миграцией. Если вы создаете первую миграцию с помощью параметра -IgnoreChanges (или удалите их вручную, как описано здесь: http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/), вы не сможете использовать миграции, чтобы создать новую таблицу с помощью класса DbMigrator. потому что у вас нет начальной миграции. Если вы создадите первую миграцию без использования -IgnoreChanges, то миграция существующей базы данных будет невозможна. Есть ли у кого-нибудь решение этой проблемы?


person Mihai Ciureanu    schedule 04.07.2012    source источник


Ответы (1)


Итак, у вас есть существующая база данных, и вы хотите использовать миграции в этой базе данных, и в то же время вы хотите поддерживать создание базы данных путем миграции в случае нового развертывания?

Похоже, немного неподдерживаемый вариант использования. Самым простым в этом случае (не тестировавшимся) была бы условная компиляция или условная миграция, управляемая некоторым ключом AppSettings. Это означает создание начальной миграции, как если бы у вас нет базы данных, и изменение метода Up, чтобы:

public override void Up() {
    if (ConfigurationManager.AppSettings["NewDatabaseRequired"] == "true") {
        // Here is generated content
    }
}

or

public override void Up() {
#if NewDatabaseRequired
    // Here is generated content
#endif
}

Существует множество других более сложных вариантов, включая создание сценария для вашей текущей базы данных, изменение сценария для завершения, если таблицы уже существуют, добавление сценария в качестве ресурса в сборку миграции и выполнение сценария в методе Up, созданном с помощью -IgnoreChanges.

В качестве другого варианта вы можете открыть дополнительное соединение с базой данных и проверить, существуют ли уже таблицы из миграции (запросив sys.tables представление в SQL Server). Для этого не потребуется сгенерированный скрипт.

person Ladislav Mrnka    schedule 04.07.2012