Я использую EF 4.1 с отложенной загрузкой POCO.
Некоторые примеры запросов, которые я выполняю:
var discountsCount = product.Discounts.Count();
var currentDiscountsCount = product.Discounts.Count(d=>d.IsCurrent);
var expiredDiscountsCount = product.Discounts.Count(d=>d.IsExpired);
Что я хотел бы знать, так это мои запросыимеет смысл или имеет низкую производительность:
Я каждый раз обращаюсь к базе данных, или результаты будут получены из кэшированных данных в DbContext?
Можно ли получить доступ к свойствам навигации "изчеши "каждый раз, как указано выше, или я должен их кэшировать, а затем выполнять дополнительные запросы к ним, например:
var discounts = product.Discounts;
var current = discounts.Count(d=>d.IsCurrent);
var expired = discounts.Count(d=>d.Expired);
Как насчет сложного случая, подобного приведенному ниже, выполняет ли он всю коллекцию и затемвыполнять локальные операции над ним или он создает специальный запрос SQL, что означает, что я не могу повторно использовать результаты, чтобы избежать повторного попадания в базу данных:
var chained = discounts.OrderBy(d=>d.CreationDate).Where(d=>d.CreationDate < DateTime.Now).Count();
Спасибо за совет!
РЕДАКТИРОВАТЬ на основе комментариев ниже
Поэтому, как только я вызову свойство навигации (которое является коллекцией), оно загрузит весь граф объекта.Но что, если я отфильтровал эту коллекцию, используя .Count(d=>d...)
или Select(d=>d...)
или Min(d=>d...)
и т. Д. Загружается ли также весь график или только конечные данные?