Актуализиране на базата данни след промени в модела - 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 studio да изтрия базата данни и след това да се върна към 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 вече не можете автоматично да генерирате миграцията (делтата между текущата структура на базата данни и дефинициите на обекта). Това ТРЯБВА да се направи в командния ред с помощта на командата "migrations add".

Актуализирането на структурата на базата данни обаче все още може да се извърши чрез код. Това се прави с помощта на метода dbContext.Database.Migrate(). Можете да свържете това във вашето стартиране, така че когато приложението ви за първи път се стартира, то да гарантира, че вашата база данни е актуализирана с текущата версия на вашето приложение.

Така че вашият работен процес за разработка може да бъде:

  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