- PVSM.RU - https://www.pvsm.ru -
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.
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 собирает базу данных.
Далее кратко описаны составляющие набора пакетов для работы с 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 [1].EFCore: альтернативный провайдер Oracle от Devart;
FirebirdSql.EntityFrameworkCore.Firebird: для Firebird;
Инструменты и вспомогательные пакеты:
Microsoft.EntityFrameworkCore.Tools [2] Добавляет команды для Package Manager Console (Visual Studio);
Microsoft.EntityFrameworkCore.Design [3] Нужен для генерации миграций и scaffolding (создание моделей из существующей базы);
Microsoft.EntityFrameworkCore.Proxies Поддержка ленивой загрузки (Lazy Loading) через динамические прокси;
Microsoft.EntityFrameworkCore.InMemory Провайдер для тестирования — хранит данные в памяти, без реальной БД;
Чтобы установить какой-либо пакет через PMC необходимо открыть VisualStudio, в меню найти Tools - NuGet Package Manager - Package Manager Console. Пакет устанавливается командой Install-Package, например: Install-Package Microsoft.EntityFrameworkCore.
Для установки пакетов необходимо открыть консоль через команду 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 [3]
Install-Package Microsoft.EntityFrameworkCore.Tools [2]
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);
}
}
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();
}
}
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
Автор: artxmix
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/432476
Ссылки в тексте:
[1] Devart.Data.Oracle: http://Devart.Data.Oracle
[2] Microsoft.EntityFrameworkCore.Tools: http://Microsoft.EntityFrameworkCore.Tools
[3] Microsoft.EntityFrameworkCore.Design: http://Microsoft.EntityFrameworkCore.Design
[4] Источник: https://habr.com/ru/articles/953188/?utm_source=habrahabr&utm_medium=rss&utm_campaign=953188
Нажмите здесь для печати.