Оптимизируется ли Include в EF Core?

Вопрос заключается в том, оптимизирует ли загрузку данных EF Core?
Конкретно о чем я говорю, есть такой код загрузки заказов и контрагентов у заказов:

await dbContext.Orders.Where(x => !x.IsDeleted).Include(x => x.Counterparty).ToListAsync();

Вопрос в том, что если у меня будет, например, 5 разных заказов, но с одним контрагентом, то он выгрузит 5 раз одного и того-же контрагента или будет искать ссылку в кэше и будет использовать её?
Пытался найти какую-то информацию в гугле - не смог, может что-то не так искал?
Буду рад любым ответам.


Ответы (1 шт):

Автор решения: Alexander Petrov

В документации Eager loading есть предупреждение Caution о возможных проблемах с производительностью.

В документации Split queries описана причина проблемы. Данные при загрузке могут дублироваться, как раз чего вы и опасаетесь.
Способ её устранения - использовать разделённые запросы: .AsSplitQuery().

Полезные ссылки:

Change Tracker Debugging - так можно посмотреть, как обращения происходят к отслеживаемым сущностям.

Accessing Tracked Entities - способы использования отслеживаемых объектов.

→ Ссылка