Обновление базы данных после изменения модели — Entity Framework 7

Я создал приложение, используя последнюю версию ASP.NET5 MVC 6 Entity Framework 7, и настроил миграцию, используя

dnx . ef migration add Initial
dnx . ef migration apply

Это работает, но когда я вношу изменения в модель, база данных не обновляется. Я хотел бы, чтобы база данных автоматически обновлялась после изменения модели при запуске программы.

Мое исследование указывает мне только на старую информацию, которая кажется неподходящей для Entity Framework 7.

Мой текущий код:

 public ApplicationDbContext(): base()
   {

        if (!_created)
        {

             Database.AsRelational().ApplyMigrations();
             _created = true;         
        }
  }

Может ли кто-нибудь указать мне в правильном направлении?

Я считаю, что он работает примерно так:

Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());

person Reafidy    schedule 04.07.2015    source источник
comment
Вы должны вручную запускать миграции с помощью EF7 или вызывать ApplyMigrations из кода, в EF7 нет ничего autpmagic   -  person ErikEJ    schedule 04.07.2015
comment
Эй, @ErikEJ, я звоню в applymigrations (обновил мой вопрос), похоже, он ничего не делает ... Что именно он должен делать? Я не могу найти никакой документации. Я не понимаю, почему это не может быть автоматическим, это раньше было. См. ссылку. Не могли бы вы уточнить свой комментарий?   -  person Reafidy    schedule 04.07.2015
comment
После изменения модели создайте новую миграцию!   -  person ErikEJ    schedule 04.07.2015
comment
Вручную через power shell?   -  person Reafidy    schedule 04.07.2015
comment
Я просто подумал, что будет способ автоматизировать это, в худшем случае я могу сделать Database.EnsureDeleted(); if (Database.EnsureCreated()) { // Database.AsRelational().ApplyMigrations(); _created = true; }, но это каждый раз удаляет мои тестовые данные.   -  person Reafidy    schedule 04.07.2015
comment
Да, вручную с помощью команды poweshell или dnx   -  person ErikEJ    schedule 04.07.2015
comment
Хорошо, если это так хорошо, как получается, то можете ли вы опубликовать свой комментарий в качестве ответа?   -  person Reafidy    schedule 04.07.2015


Ответы (2)


Вы должны вручную запускать миграции с помощью EF7 из командной строки или вызывать Database.Migrate из кода, в EF7 нет ничего автоматического (обдуманное решение), и после изменения модели создайте новую миграцию.

person ErikEJ    schedule 04.07.2015
comment
Спасибо, это кажется мне шагом назад. Это использование возможно с помощью кода. Теперь каждый раз, когда я меняю модель (очень часто), я должен удалить старую миграцию, запустить Power Shell, создать новую миграцию, перейти в студию SQL Server, удалить базу данных, а затем вернуться к Power Shell, чтобы применить новую схему базы данных. - person Reafidy; 04.07.2015
comment
И ApplyMigrations, как вы предлагаете, не работает, можете ли вы удалить это из своего ответа, если бы это сработало, мне не нужно было бы делать это вручную, как указано выше. - person Reafidy; 04.07.2015
comment
Вызовите ApplyMigrations только один раз во время запуска приложения — и что значит не работает? - person ErikEJ; 04.07.2015
comment
Извините, я должен был сказать, что applymigrations не является решением проблемы. Applymigrations я запускаю при запуске, но кажется, что исходная база данных создается только один раз. Если я потом поменяю модель. Applymigrations ничего не делает, он не применяет изменения к базе данных, как я ожидал. - person Reafidy; 04.07.2015
comment
Когда вы говорите о ApplyMigrations как об альтернативе ручному запуску миграции в своем ответе, это предполагает, что ApplyMigrations — это автоматическое решение, но на самом деле оно работает только один раз и не применяет изменения к модели, что является моим вопросом. - person Reafidy; 04.07.2015
comment
Если вы измените модель и добавите новые миграции в соответствии с измененной моделью, ApplyMigrations применит любые непримененные миграции. - person ErikEJ; 05.07.2015

Кажется, существует некоторая путаница между созданием миграции и процессом обновления структуры базы данных.

В EF7 вы больше не можете автоматически генерировать миграцию (дельту между текущей структурой базы данных и определениями сущностей). Это ДОЛЖНО быть сделано в командной строке с помощью команды «миграции добавить».

Однако обновление структуры базы данных все еще можно выполнить с помощью кода. Это делается с помощью метода dbContext.Database.Migrate(). Вы можете подключить это в своем Startup, чтобы при первой загрузке вашего приложения оно гарантировало, что ваша база данных обновлена ​​до текущей версии вашего приложения.

Таким образом, ваш рабочий процесс разработки может быть:

  1. изменить определения сущностей
  2. запустите команду «миграции добавить»
  3. запустите ваше приложение*

    • number 3 above assumes you've wired up the Migrate() call mentioned above in your Startup. Otherwise you also have to execute the "database update" command manually.
person retsvek    schedule 15.02.2016