C# Entity Framework Core 3.1 явная загрузка нескольких отношений, вызывающая декартовский взрыв, как разделить запрос?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# Entity Framework Core 3.1 явная загрузка нескольких отношений, вызывающая декартовский взрыв, как разделить запрос?

Сообщение Anonymous »

У меня возникла проблема с масштабированием в производственной среде. Небольшое количество записей обрабатывается нормально. Но для больших объемов требовалось экспоненциально больше времени. Эти классы предназначены только для иллюстрации.

Код: Выделить всё

Party {
DateTime When { get; set; }
ICollection Attendees { get; set; }
}

Attendee {
ICollection Gifts { get; set; }
ICollection Allergies { get; set; }
}

IEnumerable GetAllPartiesByDate(DateTime date) {
var parties = Context.Parties
.Include(p => p.Attendees).ThenInclude(a => a.Gifts)
.Include(p => p.Attendees).ThenInclude(a => a.Allergies)
.Where(p.When == date)
.ToList();
return parties;
}
С 4 совпадающими вечеринками и 7 участниками на каждой вечеринке, где у каждого участника есть 3 подарка и 2 аллергии
Это 172 строк в базе данных 4 стола

Код: Выделить всё

4 + (4*7) + (4*7*3) + (4*7*2)
EF возвращает это с помощью одного SQL-запроса с 168 строками, неплохо.

Код: Выделить всё

4 * (7) * (3) * (2)
Но увеличьте каждое из этих значений всего в 10 раз, и вы получите 142 840 строк в базе данных

Код: Выделить всё

40 + (40*70) + (40*70*30) + (40*70*20)
Но набор результатов одного запроса EF разбивается на каждое последующее отношение «один ко многим» и пытается вернуть 40 * 70 * 30 * 20 1 680 000 строк
При использовании более современных версий Entity Framework Core решением проблемы декартового взрыва является использование AsSplitQuery
По техническим причинам мы не можем обновить Entity Framework Core до предыдущей версии 3.1.
Но как реализовать AsSplitQuery в EF Core 3.1?>

Подробнее здесь: https://stackoverflow.com/questions/780 ... nships-cau
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Entity Framework Core C# рекурсивная загрузка родительских дочерних отношений отложенная загрузка
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core: включить неработоспособность для отношений «многие ко многим».
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Запрос отношений отношений Laravel Morphtomany
    Anonymous » » в форуме Php
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Запрос отношений отношений Laravel Morphtomany
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core 8. Ошибка случайной ссылки на объект FindAsync @ System.Data.Entity.Core.Common.Internal.Materiali
    Anonymous » » в форуме C#
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»