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-разработки.