EF 5 — оптимизация первых миграций кода

Сначала я использую код Entity framework 5 с включенными миграциями. Я внес много изменений в свои классы моделей, и теперь у меня слишком много классов миграции, потому что после каждого изменения я обновлял базу данных. Теперь я хочу объединить все мои обновления, чтобы получить один «начальный класс» или 2, чтобы я мог запустить команду update-database только один раз, если мне нужно снова создать свою базу данных. Возможно ли это без кода (слишком тяжелого), я имею в виду, например, с помощью команды? Спасибо.




Ответы (1)


Решение основано на том, хотите ли вы сохранить существующие данные в базах данных (если у вас есть рабочие базы данных, это определенно необходимо) или вы можете просто удалить свою базу данных.

И. Текущую базу данных можно удалить

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

    add-migration Initial

Таким образом, у вас будет только один шаг миграции вместо множества.

II. Данные должны храниться

Сначала создайте резервную копию текущей базы данных (которая установлена ​​в качестве базы данных по умолчанию в вашем решении), затем удалите базу данных, чтобы при запуске команды add-migration Entity Framework считала, что миграции еще не применялись.

После этого выполните шаги, описанные в первой части, и тогда у вас будет только один шаг миграции с именем Initial. После этого запустите

update-database

Команда, которая создаст базу данных, соответствующую вашей текущей модели, но только с одной строкой в ​​таблице __MigrationHistory. Сохраните эту строку из таблицы __MigrationHistory.

Теперь вы можете восстановить только что созданную резервную копию базы данных, удалить все строки в таблице __MigrationHistory и вставить ту одну строку, которую вы сохранили ранее. После этого Entity Framework будет правильно считать, что база данных и ваша модель обновлены, и что это было достигнуто только путем запуска начального шага миграции, и таким образом вы можете сохранить все свои данные.

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

person Márk Gergely Dolinka    schedule 13.06.2014
comment
спасибо за ответ, но я не понимаю последнюю часть. Если я удалю текущую базу данных, как я могу использовать таблицу __MigrationHistory с новой базой данных? - person Llm; 20.06.2014
comment
отредактировал мой пост, чтобы он был немного более подробным, и теперь он содержит все шаги, а не только черновик того, что делать. - person Márk Gergely Dolinka; 20.06.2014
comment
Пожалуйста, если вы решили проблему с этим ответом, отметьте его как правильный ответ;) - person Márk Gergely Dolinka; 23.06.2014