Entity Framework Core + MySQL
Полный последовательный маршрут: теория, пример, ошибка новичка, практика, самопроверка и проектный шаг в каждом уроке.
Полный последовательный маршрут: теория, пример, ошибка новичка, практика, самопроверка и проектный шаг в каждом уроке.
Переходи дальше только после того, как можешь воспроизвести идею самостоятельно и понимаешь, зачем она нужна.
После модулей закрепляй материал практикой и проверками. Курс считается освоенным только после выполнения критериев, а не после простого открытия всех страниц.
Entity-класс представляет данные предметной сущности, которые EF Core сопоставляет со строками таблицы.
DbContext связывает модель EF Core, connection и операции с данными.
DbSet представляет точку входа для запросов и изменений сущностей.
Fluent API позволяет явно настроить таблицы, ключи, длины и связи.
Value converters и owned/value objects: разберём принцип, увидим рабочий пример и закрепим его на самостоятельной задаче.
Запрос EF выполняется в БД, когда материализуется.
LINQ к DbSet — это не обычный List: EF пытается перевести выражение в SQL.
Проекция уменьшает объём данных и делает намерение запроса яснее.
Для проверки существования не нужно загружать все строки.
AsNoTracking и tracking identity: разберём принцип, увидим рабочий пример и закрепим его на самостоятельной задаче.
Проекции вместо Include всего графа: разберём принцип, увидим рабочий пример и закрепим его на самостоятельной задаче.
Split queries и cartesian explosion: разберём принцип, увидим рабочий пример и закрепим его на самостоятельной задаче.
Проекции вместо загрузки сущности: сначала разберись, какую проблему решает механизм, затем изучи пример и проверь понимание на собственной реализации.
N+1 запросов: сначала разберись, какую проблему решает механизм, затем изучи пример и проверь понимание на собственной реализации.
AsSplitQuery: сначала разберись, какую проблему решает механизм, затем изучи пример и проверь понимание на собственной реализации.
Tracking нужен для изменений, но отчётным read-only запросам часто не требуется.
N+1 queries — важная тема раздела «Производительность». В этом уроке ты сначала разберёшь смысл, затем увидишь рабочий пример и сразу закрепишь материал самостоятельно.
Пагинация keyset — важная тема раздела «Производительность». В этом уроке ты сначала разберёшь смысл, затем увидишь рабочий пример и сразу закрепишь материал самостоятельно.
Добавление entity только сообщает DbContext о новой записи; SQL выполняется при SaveChanges.
Загруженная tracked-entity отслеживает изменения свойств.
Remove помечает entity на удаление, SQL выполняется при SaveChanges.
Несколько tracked-изменений могут сохраниться одним SaveChanges.
Один Client может иметь много Orders.
Многие студенты изучают многие курсы — это связь M:N.
Navigation делает связи удобными в объектной модели, но не означает автоматическую загрузку данных.
Include загружает связанные данные, но слишком широкий Include может быть дорогим.
Тема «Change Tracker» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «EntityState» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «SaveChanges как unit of work» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Миграции» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Migration history» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Seed data» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «One-to-one» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Many-to-many» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Delete behavior» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Owned/value-like data» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Projection вместо лишнего Include» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Filtered Include» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Split query» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Compiled query: когда не нужен» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Индексы через модель» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Логирование SQL» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «N+1: диагностика» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Пагинация Offset» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Keyset pagination» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Явная транзакция» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Concurrency» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «DbContext lifetime» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Repository поверх EF: когда полезен» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Specification/query object» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Типы .NET ↔ MySQL» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Decimal precision» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «DateTime и UTC» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Connection resilience» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Параметры и SQL injection» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Тесты запросов» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Миграции при развёртывании» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Backup перед schema change» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Slow query → LINQ» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.
Тема «Итог EF Core + MySQL» нужна не для запоминания термина, а чтобы решать конкретную задачу в реальном проекте.