Основная информация о EF Core
Entity Framework Core (EF Core) — это кроссплатформенная ORM для .NET, которая позволяет работать с базами данных через C# классы и LINQ, а не вручную писать SQL-запросы. EF Core поддерживает модели с сущностями и контекстом, миграции для эволюции схемы, а также множество провайдеров (SQLite, SQL Server и др.). Библиотека распространяется как набор NuGet-пакетов и работает как в Visual Studio, так и через .NET CLI на Windows, macOS и Linux. Кроме базового CRUD, современные версии EF Core поддерживают мощные возможности запросов и массовые операции вроде ExecuteUpdate/ExecuteDelete, а также загрузку связанных данных через Include.
Основные понятия EF Core
-
DbContext
(контекст базы данных): представляет собой основной класс, который управляет базой данных в коде (наследуется отMicrosoft.EntityFrameworkCore.DbContext
), например:public class AppDbContext : DbContext { // Коллекция сущностей (таблица Users) public DbSet Users { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // Для примера используем SQLite optionsBuilder.UseSqlite("Data Source=app.db"); } }
DbSet
: набор сущностей, содержащихся в таблице базы данных, грубо говоря один DbSet = одной таблице в БД, например:
public DbSet Users { get; set; }
Сущности: представляют собой обычные С#-классы, которые описывают данные (обычно соответствующие таблицам в БД), например:
public class User
{
public int Id { get; set; } // Первичный ключ
public string Name { get; set; } // Имя пользователя
public int Age { get; set; } // Возраст
}
Миграции: это механизм для изменения структуры базы данных при изменении моделей;
-
Конфигурация сущности: используется для настройки отношений между сущностями, ограничения сущностей и т.д. Есть несколько способов задать конфигурацию сущности:
Conventions;
Data Annotations;
Fluent API;
Отдельные классы конфигурации Подробнее про каждый способ будет написано в другой статье.
Отслеживание изменений (Change Tracking): EF Core поддерживает отслеживает изменения всех сущностей и при сохранении данных создаёт SQL-запрос на изменение БД.
Подходы к разработке БД
EF Core поддерживает 2 способа работы с базами данных:
Database-first: модели и контекст базы данных создаются исходя из уже имеющейся базы данных;
Model-first: изначально вы пишите модели данных, конфигурации моделей и контекст базы данных, из которых уже EF Core собирает базу данных.
Основные NuGet-пакеты
Далее кратко описаны составляющие набора пакетов для работы с EF Core.
-
Базовые пакеты:
Microsoft.EntityFrameworkCore: главный пакет EF Core. Содержит ядро ORM, LINQ‑запросы, отслеживание изменений и работу с контекстом;
Microsoft.EntityFrameworkCore.Relational: дополнительный слой для реляционных СУБД (SQL Server, PostgreSQL, SQLite и др.). Включает поддержку транзакций, миграций, индексов, ограничений и т. д.
-
Провайдеры баз данных:
Microsoft.EntityFrameworkCore.SqlServer: для Microsoft SQL Server;
Microsoft.EntityFrameworkCore.Sqlite: для SQLite;
Npgsql.EntityFrameworkCore.PostgreSQL: для PostgreSQL;
Pomelo.EntityFrameworkCore.MySql: для MySQL/MariaDB;
Oracle.EntityFrameworkCore: для Oracle Database;
Devart.Data.Oracle.EFCore: альтернативный провайдер Oracle от Devart;
FirebirdSql.EntityFrameworkCore.Firebird: для Firebird;
-
Инструменты и вспомогательные пакеты:
Microsoft.EntityFrameworkCore.Tools Добавляет команды для Package Manager Console (Visual Studio);
Microsoft.EntityFrameworkCore.Design Нужен для генерации миграций и scaffolding (создание моделей из существующей базы);
Microsoft.EntityFrameworkCore.Proxies Поддержка ленивой загрузки (Lazy Loading) через динамические прокси;
Microsoft.EntityFrameworkCore.InMemory Провайдер для тестирования — хранит данные в памяти, без реальной БД;
Установка
Package Manager Console (PMC)
Чтобы установить какой-либо пакет через PMC необходимо открыть VisualStudio, в меню найти Tools - NuGet Package Manager - Package Manager Console. Пакет устанавливается командой Install-Package, например: Install-Package Microsoft.EntityFrameworkCore
.
Установка через .NET CLI
Для установки пакетов необходимо открыть консоль через команду cmd
. Чтобы установить пакет используют команду dotnet add package
, например: dotnet add package Microsoft.EntityFrameworkCore
.
Для управления миграциями базы данных и моделями данных (если используется метод Database-first) способа требуется установки дополнительного инструмента dotnet ef, который как раз таки и позволяет работать с EF Core из командной строки: dotnet tool install --global dotnet-ef
.
Пример использования
Ниже приведён пример программы для управления блогами и постами, используется SQLite:
Установка пакетов
Необходимо установить следующие пакеты (способ через Packets Manager Console):
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.Sqlite
Install-Package
Microsoft.EntityFrameworkCore.Design
Install-Package
Microsoft.EntityFrameworkCore.Tools
BloggingContext.cs
using Microsoft.EntityFrameworkCore;
using Blogging.Models;
public class BloggingContext : DbContext
{
//Таблицы БД
public DbSet Blogs = null!;
public DbSet Posts = null!;
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
//Подключение к базе данных
options.UseSqlite("Data Source=blogging.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Пример конфигурации
modelBuilder.Entity()
.HasMany(b = b.Posts)
.WithOne(p = p.Blog)
.HasForeignKey(p = p.BlogId);
}
}
Blog.cs
using System.Collections.Generic;
namespace Blogging.Models
{
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; } = string.Empty;
public List Posts { get; } = new();
}
}
Post.cs
namespace Blogging.Models
{
public class Post
{
public int PostId { get; set; }
public string Title { get; set; } = string.Empty;
public string Content { get; set; } = string.Empty;
public int BlogId { get; set; }
public Blog? Blog { get; set; }
}
}
Инициализация миграции
Далее необходимо выполнить команды (в примере в PMC):
add-migration MigrationName
update-database
Комментарии (4)
kirichenec
03.10.2025 13:09если написал что-то неправильно и чтобы меня поправили
Это очередная нейро-копипаста мсдн? Ну вот какой смысл это людям видеть в ленте /агрегаторах новостей?
Вы если что-то хотите спросить, лучше идите в тот же чат по дотнету (DotNetRuChat в тг, например) - там можно даже дурацкие вопросы задавать, это не зазорно. А вот такие вот тексты или в черновиках держать, или закладкой на мсдн.
А так вы просто людей раздражаете пустыми кликами и разочарованием.
Это может звучать обидно, но поставьте себя на место людей, которые сюда приходят за опытом, а видят одно и то же. Это всё же не жж, имхо
TheCat174
Объясните, какой смысл от такой статьи? Это же буквально базовые знания, которые имеются в оф. документации Microsoft. Или это для того, чтобы очередной новорег смог карму людям снижать?
artxmix Автор
Просто структурирую свои знания, а сюда выложил, если написал что-то неправильно и чтобы меня поправили.
MANAB
Я сейчас некрасиво поступлю, оценивая, но хотелось бы все же сказать - имхо это ну слишком уж малые знания по EntityFramework, и там нету никаких знаний/опыта про то, как, когда и в каких случаях/задачах лучше сделать.
К примеру, как обновлять атомарно поля сущностей только по их Id или определенному условию, когда использовать/не использовать Tracking, реализация транзакций, паттерны, использование хранимых процедур и т.д.