Ответ
Entity Framework Core (EF Core) — это современная, кроссплатформенная, легковесная и расширяемая ORM (Object-Relational Mapper) для .NET. Он позволяет разработчикам работать с реляционными базами данных, используя объекты .NET, минимизируя необходимость написания низкоуровневого SQL-кода.
Ключевые возможности
- LINQ-запросы: Пишите запросы на языке C#, EF Core транслирует их в SQL.
- Отслеживание изменений (Change Tracking): Автоматически отслеживает изменения в загруженных сущностях и генерирует соответствующие SQL-команды при сохранении.
- Миграции (Migrations): Позволяют управлять схемой базы данных как кодом, создавая инкрементальные скрипты обновления.
- Поддержка различных СУБД: SQL Server, PostgreSQL, MySQL, SQLite, Oracle и другие через провайдеры.
- Работа с транзакциями.
- Жадная (Eager), явная (Explicit) и ленивая (Lazy) загрузка связанных данных.
Базовый пример работы
1. Определение модели и контекста данных:
public class Blog
{
public int Id { get; set; }
public string Url { get; set; }
public int Rating { get; set; }
public List<Post> Posts { get; set; } // Навигационное свойство
}
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(@"Server=(localdb)mssqllocaldb;Database=BloggingDB;Trusted_Connection=True");
}
2. Использование (CRUD):
// Создание (Create)
using var db = new BloggingContext();
var blog = new Blog { Url = "https://example.com", Rating = 5 };
db.Blogs.Add(blog);
await db.SaveChangesAsync();
// Чтение (Read) с LINQ
var topBlogs = await db.Blogs
.Where(b => b.Rating > 3)
.OrderByDescending(b => b.Rating)
.ToListAsync();
// Обновление (Update)
var blogToUpdate = await db.Blogs.FindAsync(1);
if (blogToUpdate != null)
{
blogToUpdate.Rating = 10;
await db.SaveChangesAsync(); // EF Core сгенерирует UPDATE
}
// Удаление (Delete)
var blogToDelete = await db.Blogs.FindAsync(2);
db.Blogs.Remove(blogToDelete);
await db.SaveChangesAsync(); // EF Core сгенерирует DELETE
Когда использовать EF Core?
Идеален для быстрой разработки приложений с богатой объектной моделью. Для высоконагруженных сценариев, требующих максимальной производительности и тонкого контроля над SQL, иногда предпочтительнее использовать микро-ORM (например, Dapper) или чистый SQL.