Что такое Entity Framework Core в C#

Entity Framework Core (EF Core) — это современный, легковесный и кросс-платформенный инструмент для работы с базами данных для .NET. Он позволяет разработчикам работать с базами данных, используя объекты C# вместо написания SQL-запросов вручную. EF Core предоставляет удобный и эффективный способ работы с данными, абстрагируя взаимодействие с базой данных и упрощая процессы создания, чтения, обновления и удаления данных.

Основные особенности Entity Framework Core

EF Core поддерживает широкий спектр баз данных, включая SQL Server, SQLite, PostgreSQL, MySQL и другие, а также предоставляет возможности для работы с различными типами источников данных. Благодаря своему кросс-платформенному характеру, EF Core может использоваться как на Windows, так и на Linux или macOS.

EF Core включает в себя несколько ключевых возможностей:

  • Моделирование данных через классы C#: сущности данных представлены в виде классов.
  • Миграции: автоматизация процесса обновления структуры базы данных.
  • Ленивая загрузка и явная загрузка: поддержка различных подходов для работы с связанными данными.
  • Запросы LINQ: возможность выполнения запросов через LINQ, что делает работу с данными еще более удобной.

Как работает Entity Framework Core?

EF Core работает на основе концепции сущностей (entities) и контекста базы данных (DbContext). Сущности — это классы, которые представляют таблицы базы данных, а DbContext — это основной класс, который управляет сущностями и их взаимодействием с базой данных. В процессе работы EF Core преобразует объекты C# в SQL-запросы и выполняет их к базе данных.

Пример модели данных

В EF Core модели данных создаются в виде классов C#. Каждый класс соответствует таблице в базе данных, а свойства класса — столбцам этой таблицы.

Пример модели данных:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

Этот класс будет соответствовать таблице Products в базе данных. Свойства класса будут маппироваться на столбцы таблицы.

Контекст базы данных

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

Пример контекста базы данных:

public class ApplicationDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("ConnectionStringHere");
    }
}

Здесь DbSet<Product> представляет таблицу Products, и с помощью контекста можно выполнять операции CRUD (создание, чтение, обновление, удаление) над данными.

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

Миграции в EF Core позволяют синхронизировать структуру базы данных с моделью данных. Когда схема данных изменяется, миграции позволяют автоматически обновлять базу данных без необходимости вручную изменять ее структуру.

Создание миграции

Для создания миграции используется команда в консоли диспетчера пакетов или в командной строке:

dotnet ef migrations add InitialCreate

Эта команда создает миграцию, которая отражает текущие изменения в модели данных.

Применение миграций

После создания миграции, ее можно применить к базе данных с помощью команды:

dotnet ef database update

Это обновит структуру базы данных, добавив или изменив таблицы и столбцы в соответствии с моделью данных.

Основные операции с данными

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

Добавление данных

using (var context = new ApplicationDbContext())
{
    var product = new Product { Name = "Laptop", Price = 1000 };
    context.Products.Add(product);
    context.SaveChanges();
}

Этот код добавляет новый продукт в базу данных.

Извлечение данных

using (var context = new ApplicationDbContext())
{
    var products = context.Products.ToList();
}

Этот код извлекает все продукты из базы данных.

Обновление данных

using (var context = new ApplicationDbContext())
{
    var product = context.Products.First();
    product.Price = 1200;
    context.SaveChanges();
}

Этот код обновляет цену первого продукта в базе данных.

Удаление данных

using (var context = new ApplicationDbContext())
{
    var product = context.Products.First();
    context.Products.Remove(product);
    context.SaveChanges();
}

Этот код удаляет первый продукт из базы данных.

Работа с отношениями между сущностями

EF Core поддерживает различные типы отношений между сущностями, такие как один к одному, один ко многим и многие ко многим.

Пример отношения “Один ко многим”

Предположим, у нас есть две сущности: Category и Product. Один продукт может принадлежать одной категории, но одна категория может содержать множество продуктов.

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Product> Products { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

Этот код определяет отношения один ко многим между категориями и продуктами. EF Core автоматически настроит внешний ключ CategoryId в таблице Products.

Запросы с использованием LINQ

EF Core поддерживает выполнение запросов через LINQ, что позволяет фильтровать и сортировать данные в удобном и мощном синтаксисе C#.

using (var context = new ApplicationDbContext())
{
    var expensiveProducts = context.Products
        .Where(p => p.Price > 500)
        .OrderBy(p => p.Name)
        .ToList();
}

Этот запрос извлекает все продукты с ценой выше 500 и сортирует их по имени.


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