Ответ
Entity Framework (EF) — это объектно-реляционный маппер (ORM) с открытым исходным кодом от Microsoft для платформы .NET. Он позволяет разработчикам работать с реляционной базой данных, используя объекты .NET, и минимизирует необходимость в написании низкоуровневого SQL-кода.
Основные концепции и возможности:
- DbContext: Центральный класс, представляющий сессию работы с БД. Отслеживает изменения объектов, выполняет запросы и сохраняет данные.
- DbSet
: Представляет коллекцию сущностей (таблицу) в контексте. - LINQ to Entities: Позволяет писать строго типизированные запросы к БД на языке C#.
- Трекинг изменений: EF автоматически отслеживает изменения в извлечённых объектах и генерирует соответствующие команды
INSERT,UPDATE,DELETEпри вызовеSaveChanges(). - Миграции: Механизм для инкрементального обновления схемы БД в соответствии с изменениями в моделях (Code First).
- Поставщики данных: Поддержка SQL Server, PostgreSQL, SQLite, MySQL, Cosmos DB и других.
Пример (Code First подход):
// 1. Определяем модель (сущность)
public class Blog
{
public int Id { get; set; } // Первичный ключ
public string Url { get; set; }
public List<Post> Posts { get; set; } // Навигационное свойство
}
// 2. Создаём контекст
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; } // DbSet для таблицы Blogs
public DbSet<Post> Posts { get; set; }
}
// 3. Используем
using (var db = new BloggingContext())
{
// Запрос через LINQ
var blogs = await db.Blogs
.Where(b => b.Url.Contains("tech"))
.Include(b => b.Posts) // Жадная загрузка связанных данных
.ToListAsync();
// Добавление новой записи
db.Blogs.Add(new Blog { Url = "http://example.com" });
await db.SaveChangesAsync();
}
Подходы к разработке:
- Code First: Создание классов сущностей и генерация схемы БД из кода (рекомендуемый современный подход).
- Database First: Генерация классов сущностей и контекста из существующей базы данных.
- Model First (устарел): Проектирование модели в дизайнере EDMX и генерация кода и БД.