Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В реальных проектах модели данных изменяются по мере реализации функций: новые сущности или свойства добавляются и удаляются, а схемы баз данных должны быть изменены соответствующим образом для синхронизации с приложением. Функция миграции в EF Core позволяет постепенно обновлять схему базы данных, чтобы обеспечить синхронизацию с моделью данных приложения при сохранении существующих данных в базе данных.
На высоком уровне миграция работает следующим образом:
- При изменении модели данных разработчик использует средства EF Core для добавления соответствующей миграции, описывающей обновления, необходимые для синхронизации схемы базы данных. EF Core сравнивает текущую модель с моментальным снимком старой модели, чтобы определить различия и создать исходные файлы миграции; файлы можно отслеживать в системе управления версиями проекта, как и любой другой исходный файл.
- После создания новой миграции его можно применить к базе данных различными способами. EF Core записывает все примененные миграции в специальную таблицу журнала, позволяя ему знать, какие миграции были применены и которые не были применены.
Остальная часть этой страницы — это пошаговое руководство для начинающих по использованию миграций. Дополнительные сведения см. на других страницах этого раздела.
Getting started
Предположим, что вы только что завершили свое первое приложение EF Core, которое содержит следующую простую модель:
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
}
Во время разработки, возможно, вы использовали API создания и удаления для быстрой итерации , изменив модель по мере необходимости; но теперь, когда ваше приложение будет работать, вам нужен способ безопасного развития схемы без удаления всей базы данных.
Установка средств
Сначала необходимо установить средства командной строки EF Core:
- Обычно мы рекомендуем использовать средства .NET CLI, которые работают на всех платформах.
- Если вы более комфортно работаете в Visual Studio или работаете с миграцией EF6, вы также можете использовать средства консоли диспетчера пакетов.
Создание первой миграции
Теперь вы готовы добавить первую миграцию! Укажите EF Core создать миграцию с именем InitialCreate:
dotnet ef migrations add InitialCreate
EF Core создаст каталог с именем Migrations в проекте и создаст некоторые файлы. Рекомендуется проверить, что именно создано EF Core - и, возможно, измените его - но мы пропустим это на данный момент.
Создание базы данных и схемы
На этом этапе вы можете создать базу данных EF и создать схему из миграции. Это можно сделать следующим образом:
dotnet ef database update
Это все, что нужно, — приложение готово к запуску в новой базе данных, и вам не нужно писать одну строку SQL. Обратите внимание, что этот способ применения миграции идеально подходит для локальной разработки, но менее подходит для рабочих сред. Дополнительные сведения см. на странице "Применение миграций ".
Развитие модели
Несколько дней прошло, и вам предлагается добавить метку времени создания в блоги. Вы выполнили необходимые изменения в приложении, и модель теперь выглядит следующим образом:
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedTimestamp { get; set; }
}
Модель и рабочая база данных теперь не синхронизированы. Необходимо добавить новый столбец в схему базы данных. Давайте создадим новую миграцию для этого:
dotnet ef migrations add AddBlogCreatedTimestamp
Обратите внимание, что мы предоставляем описательное имя миграции, чтобы упростить понимание журнала проекта позже.
Так как это не первая миграция проекта, EF Core теперь сравнивает обновленную модель с моментальным снимком старой модели, прежде чем был добавлен столбец; Моментальный снимок модели является одним из файлов, созданных EF Core при добавлении миграции, и проверяется в систему управления версиями. На основе этого сравнения EF Core обнаруживает, что добавлен столбец и добавляет соответствующую миграцию.
Теперь вы можете применить миграцию, как и раньше:
dotnet ef database update
Обратите внимание, что на этот раз EF обнаруживает, что база данных уже существует. Кроме того, когда была применена первая миграция выше, этот факт был записан в специальной таблице журнала миграций в базе данных; это позволяет EF автоматически применять только новую миграцию.
Исключение частей модели
Иногда может потребоваться ссылаться на типы из другого DbContext. Это может привести к конфликтам миграции. Чтобы предотвратить это, исключите тип из миграций одного из DbContexts.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<IdentityUser>()
.ToTable("AspNetUsers", t => t.ExcludeFromMigrations());
}
Next steps
Выше было лишь краткое введение в миграцию. Обратитесь к другим страницам документации, чтобы узнать больше об управлении миграцией, применении и других аспектах. Справочник по средству командной строки .NET также содержит полезные сведения о различных командах.
Additional resources
- Справочник по инструментам Entity Framework Core — .NET CLI : включает команды для обновления, удаления, добавления, удаления и т. д.
- Справочник по инструментам Entity Framework Core — консоль диспетчера пакетов в Visual Studio: включает команды для обновления, удаления, добавления, перемещения и т. д.
- Сеанс стенда сообщества данных .NET , выполняющий новые функции миграции в EF Core 5.0.