Bulk Operations - боль EF

Слайд 2

Всегда используйте профайлер !

Позволяет обнаружить проблемные места на ранней стадии
Неоптимальный запрос (нужно

Всегда используйте профайлер ! Позволяет обнаружить проблемные места на ранней стадии Неоптимальный
посмотреть execution plan)
Повторные вызовы одного и того же запроса
Неправильное использование Lazy Loading
т.д.

Слайд 3

Использование SaveChanges

Стараемся вызывать один раз *
Unit Of Work паттерн
* не железное правило,

Использование SaveChanges Стараемся вызывать один раз * Unit Of Work паттерн *
каждый раз думаем

Слайд 4

Bulk Operations – боль EF

Сторонние библиотки (платные)
Stored procs
Raw SQL
SqlBulkCopy
Add vs AddRange
AutoDetectChangesEnabled

Bulk Operations – боль EF Сторонние библиотки (платные) Stored procs Raw SQL

Слайд 5

AutoDetectChangesEnabled

AutoDetectChangesEnabled

Слайд 6

Bulk Operations – DB side

Bulk Operations – DB side

Слайд 7

Lazy Loading – Проблема N+1 запросов
- Include
- Перестроить запрос
LINQ: отложенное выполнение

Lazy Loading – Проблема N+1 запросов - Include - Перестроить запрос LINQ:
(не связано с EF изучить самостоятельно)

Слайд 8

Быстрое чтение

AsNoTracking
var blogs = context.Blogs.AsNoTracking().ToList();

Быстрое чтение AsNoTracking var blogs = context.Blogs.AsNoTracking().ToList();

Слайд 9

Проекции

Загружаем из базы только те поля, которые нам нужны
- Широкая таблица
- Неочевидный

Проекции Загружаем из базы только те поля, которые нам нужны - Широкая
пример (join)

Слайд 10

IQueryable vs IEnumerable

Различия
IEnumerable doesn’t support lazy loading
IQueryable support lazy loading
Querying data

IQueryable vs IEnumerable Различия IEnumerable doesn’t support lazy loading IQueryable support lazy
from a database, IEnumerable execute a select query on the server side, load data in-memory on a client-side and then filter data.
Querying data from a database, IQueryable execute the select query on the server side with all filters.