Как работать с миграциями EF Core в ASP.NET Core

автор vadim


Entity Framework Core, средство сопоставления объектов и баз данных для .NET Core, является кроссплатформенным аналогом Entity Framework ORM (объектно-реляционное сопоставление) для .NET с открытым исходным кодом. Среди примечательных функций EF Core — возможность выполнять миграции для обновления схем базы данных и обеспечения их синхронизации с моделями данных ваших приложений.

В этой статье мы углубимся в основы использования миграции EF Core в приложениях ASP.NET Core 7. Чтобы использовать примеры кода, представленные в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Создайте проект веб-API ASP.NET Core в Visual Studio 2022.

Прежде всего, давайте создадим проект ASP.NET Core 7 в Visual Studio 2022. Выполните следующие действия:

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и расположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В показанном ниже окне «Дополнительная информация» снимите флажок «Использовать контроллеры…», поскольку в этом примере мы будем использовать минимальное количество API. Оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию).
  9. Убедитесь, что флажки «Включить поддержку Open API», «Настроить для HTTPS» и «Включить Docker» сняты, поскольку мы не будем использовать эти функции здесь.
  10. Щелкните Создать.

Мы будем использовать этот проект веб-API ASP.NET Core 7 для работы с миграциями EF Core в следующих разделах.

Что такое миграция EF Core?

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

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

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

Обратите внимание, что миграция включена в EF Core по умолчанию. Вы можете работать с миграциями либо в Visual Studio через консоль диспетчера пакетов, либо с помощью инструмента командной строки для запуска команд EF Core CLI.

Установите пакеты EF Core NuGet.

Создайте проект библиотеки классов в том же проекте веб-API ASP.NET Core 7, который мы создали выше. Мы будем использовать этот проект библиотеки классов для реализации миграций EF Core. Предполагая, что первоначальный проект назывался EFMigrationsDemo, назовите проект библиотеки классов EFMigrationsDemo.Data.

В это время ваш обозреватель решений будет выглядеть так, как показано на рис. 1 ниже.

Миграция ядра ef 01 IDG

Рисунок 1: Окно Solution Explorer в начале нашего проекта.

Теперь установите следующие три пакета NuGet в проекте EFMigrationsDemo.Data.

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

Затем установите следующий пакет NuGet в начальном проекте EFMigrationsDemo, чтобы обеспечить успешную работу миграции.

Microsoft.EntityFrameworkCore.Design

Создайте класс модели в ASP.NET Core.

Создайте новый файл с именем Author.cs в проекте EFMigrationsDemo.Data и введите следующий код.

using System.ComponentModel.DataAnnotations;
namespace EFMigrationsDemo.Data
{
    public partial class Author
    {
        [Key]
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string Address { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
    }
}

Создайте контекст данных в ASP.NET Core.

Создайте новый файл .cs с именем EFMigrationsDemoDBContext.cs в проекте EFMigrationsDemo.Data и введите в него следующий код.

using Microsoft.EntityFrameworkCore;
namespace EFMigrationsDemo.Data
{
    public partial class EFMigrationsDemoDBContext : DbContext
    {
        public EFMigrationsDemoDBContext(DbContextOptions
        <EFMigrationsDemoDBContext> options)
            : base(options)
        {
        }
        public virtual DbSet<Author> Author { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Author>(entity => {
                entity.HasKey(k => k.Id);
            });
            OnModelCreatingPartial(modelBuilder);
        }
        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
    }
}

Создание миграции с помощью EF Core

Чтобы создать миграцию, следует использовать команду Add-Migration в диспетчере пакетов NuGet. Например, чтобы создать новую миграцию с именем MyDemoMigration в консоли диспетчера пакетов, выполните следующую команду.

Add-Migration MyDemoMigration

Кроме того, вы можете выполнить следующую команду в интерфейсе командной строки dotnet.

dotnet ef migrations add MyDemoMigration

Это создаст новый файл миграции в папке Migrations вашего проекта, включая код, представляющий изменения в вашей модели данных. Вы можете проверить полученный код (см. рис. 2), чтобы убедиться, что он соответствует вашим предполагаемым изменениям, и внести необходимые корректировки.

Миграция ядра ef 02 IDG

Рисунок 2: Автоматически сгенерированный файл миграции.

Примените миграцию с помощью EF Core

Чтобы применить миграцию к базе данных, вы должны уже создать миграцию. Затем используйте команду Update-Database в консоли диспетчера пакетов, чтобы применить изменения к вашей базе данных. В следующем фрагменте кода показано, как можно применить новейшую миграцию к базе данных.

Update-Database

Кроме того, вы можете использовать следующую команду CLI dotnet.

dotnet ef database update

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

На рис. 3 показана база данных и таблицы, созданные после выполнения этой команды.

Миграция ядра ef 03 IDG

Рисунок 3: База данных и ее объекты после выполнения команды Database-Update.

Удаление миграции с помощью EF Core

Если вам нужно отменить последнюю миграцию, используйте Remove-Migration в консоли диспетчера пакетов или в dotnet ef migrations remove команду в терминале. Например, вы можете выполнить следующую команду в консоли диспетчера пакетов, чтобы стереть последнюю примененную миграцию.

Remove-Migration

Или вы можете выполнить следующую команду CLI dotnet.

dotnet ef migrations remove

Remove-Migration Команда отлично справляется с удалением последней примененной миграции и соответствующим образом обновляет схему базы данных, чтобы она соответствовала предыдущей миграции. Другими словами, команда удалит самую последнюю миграцию из папки «Миграции» проекта и изменит схему базы данных, чтобы отразить миграцию перед ней.

Отменить миграцию с помощью EF Core

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

update-database <migration name>

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

Update-database MyInitialMigration

В качестве альтернативы вы можете использовать следующую команду CLI dotnet.

dotnet ef database update MyInitialMigration

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

Related Posts

Оставить комментарий