С#. Entity. Migrations

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

Мы можем использовать этот контекст данных для работы с БД, добавлять и удалять данные. Но в какой-то момент, возможно, нам захочется что-то изменить, например, добавить в модель Phone новое свойство:

И если мы попытаемся обратиться к базе данных после изменения модели, то мы получим ошибку:

И если мы попытаемся обратиться к базе данных после изменения модели, то мы получим ошибку:

Миграции в Entity Framework 6

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

Для этого в Visual Studio перейдем к окну Package Manager Console, которое можно найти внизу VS. Если такого окна нет, то его можно открыть, перейдя к меню View->Other Window->Package Manager Console

Для добавления функционала миграций введем в это окно следующую команду:

После ввода команды нажмем на Enter. И в результате выполнения данной команды в проект будет добавлена папка Migrations, в которой будут два файла: Configration.cs (содержит базовую конфигурацию миграций) и файл начальной миграции, название которого может отличаться. Файл начальной миграции устанавливает, как база данных определяется на данный момент. То есть в моем случае он будет выглядеть так:

Далее выполним в Package Manager Console следующую команду:

Добавение миграции Entity Framework в проект

И после выполнения этой команды в папку Migrations будет добавлена новая миграция:

В миграции определяются два метода: Up() и Down(). В методе Up с помощью вызова метода AddColumn добавляется новый столбец Company в уже имеющуюся таблицу dbo.Phones. Метод Down удаляет столбец на случай, если они существуют. Фактически эти методы равнозначны выражению ALTER в языке SQL, которое меняет структуру базы данных и ее таблиц.

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

Эта команда обновит базу данных, добавив в нее новый столбец. Причем данные, которые уже были в таблицы, сохранятся.

Если база данных уже используется в производстве, развернута на сервере, где бы не можем произвести миграции, то мы можем сгенерировать по миграции скрипт. Для этого надо ввести следующую команду:

В итоге в моем случае будет сгенерирован следующий скрипт SQL:

Затем данный скрипт можно выполнить для используемой базы данных.

Методы миграций

Основу миграции составляют ряд методов, которые позволяют удалять, добавлять столбцы и таблицы, изменять настройки столбцов и так далее. Основные методы:

  • CreateTable: добавляет таблицу
  • DropTable: удаляет таблицу
  • AddColumn: добавляет столбец
  • DropColumn: удаляет столбец
  • AlterColumn: изменяет настройки столбца
  • AddForeignKey: добавляет внешний ключ
  • DropForeignKey: удаляет внешний ключ
  • AddPrimaryKey: добавляет первичный ключ
  • DropPrimaryKey: удаляет первичный ключ
  • CreateIndex: добавляет индекс
  • DropIndex: удаляет индекс
  • CreateStoredProcedure: создает хранимую процедуру
  • DropStoredProcedure: удаляет хранимую процедуру
  • AlterStoredProcedure: изменяет хранимую процедуру

Далее от этих методов можно строить цепочки дополнительных методов. Например, создание таблицы:

 

This entry was posted in C#. Bookmark the permalink.