Оптимизируется ли Include в EF Core?
Вопрос заключается в том, оптимизирует ли загрузку данных EF Core?
Конкретно о чем я говорю, есть такой код загрузки заказов и контрагентов у заказов:
await dbContext.Orders.Where(x => !x.IsDeleted).Include(x => x.Counterparty).ToListAsync();
Вопрос в том, что если у меня будет, например, 5 разных заказов, но с одним контрагентом, то он выгрузит 5 раз одного и того-же контрагента или будет искать ссылку в кэше и будет использовать её?
Пытался найти какую-то информацию в гугле - не смог, может что-то не так искал?
Буду рад любым ответам.
Ответы (1 шт):
В документации Eager loading есть предупреждение Caution о возможных проблемах с производительностью.
В документации Split queries описана причина проблемы. Данные при загрузке могут дублироваться, как раз чего вы и опасаетесь.
Способ её устранения - использовать разделённые запросы: .AsSplitQuery().
Полезные ссылки:
Change Tracker Debugging - так можно посмотреть, как обращения происходят к отслеживаемым сущностям.
Accessing Tracked Entities - способы использования отслеживаемых объектов.