Entity Framework 6 Model-First - обновление производственной базы данных на основе локальных изменений

Я новичок в EF и унаследовал проект, который, очевидно, использовал разработку на основе баз данных.

Производственная среда использует SQL Azure, и я в основном пытаюсь выяснить стандартный подход к обновлению его схемы.

Сначала я попытался включить миграцию для проекта EF, прежде чем пытаться выполнить процесс, описанный здесь: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html... но я обнаружил, что это работает только для разработки кода.

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

Оттуда я хотел бы развернуть изменения в среде SQL Azure, сохранив при этом все существующие записи в базе данных, но лучший способ сделать это неясен.

Есть ли что-то в инструменте EF, который будет генерировать сценарии обновления, которые не удаляют таблицы? Нужно ли писать сценарии обновления вручную? Люди обычно используют инструменты SQL Server для обновления?

Мой первоначальный поиск в Google не нашел ответа на этот вопрос, к сожалению, хотя кажется, что это должно быть чрезвычайно распространенной проблемой.

1 ответ

Решение

EF-миграция используется для разработки кода, а не для базы данных. Но вы все равно можете использовать его, если вы делаете обратный инжиниринг из базы данных. Для этого вам необходимо установить Инструменты Entity Framework 6, но для этого потребуются некоторые усилия, например:

  • Обратный инжиниринг исходной базы данных
  • Создать новую базу данных с помощью EF-миграции (Enable-Migrations, Add-Migration InitialCreate, Update-Database ConnectionStringName NewDatabase)
  • Обратный инжиниринг целевой базы данных (база данных, которая была изменена)
  • Создать скрипт обновления (Enable-Migrations, Add-Migration UpgradeToVersionX, Update-Database ConnectionStringName NewDatabase -Script)

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


Но так как вы сначала работаете с базой данных, которая непосредственно изменяет схему из базы данных, проще было бы использовать Schema Comparer из SQL Server Data Tools.

  • Создать новый проект проекта базы данных SQL Server (из других языков -> SQL Server)
  • Щелкните правой кнопкой мыши по проекту и выберите Schema Compare.
  • Выберите исходную базу данных и целевую базу данных
  • Запустить Generate Script

Создать скрипт

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