Два Include коллекций: декартов взрыв в одном запросе
Эндпоинт выгружает заказы вместе с позициями и платежами:
var orders = await db.Orders
.Where(o => o.CreatedAt >= from)
.Include(o => o.Items)
.Include(o => o.Payments)
.ToListAsync();
У типичного заказа 20 позиций и 3 платежа. Что происходит на уровне SQL и что с этим делают?
- База вернёт 60 строк на заказ вместо 23: две коллекции перемножаются в одном JOIN, помогает AsSplitQuery
- База вернёт 23 строки на заказ: JOIN не размножает строки, если связи настроены корректно
- EF выбросит исключение: два Include с коллекциями в одном запросе не поддерживаются
- EF и так выполнит по отдельному запросу на каждую коллекцию, а AsSplitQuery, наоборот, склеит их в один запрос с JOIN
