LinqToSql и EntityFramework предоставляют обе функции (отложенная загрузка и кэширование данных).
Например, если вы изначально загрузите клиента, этот клиент будет кэширован, и если вы запросите его снова, вы получите тот же экземпляр.
Если вы не загрузите Заказы Клиента во время этой начальной загрузки, то свойство Orders этого экземпляра Клиента будет в незагруженном состоянии. Когда вы загрузите эти заказы, экземпляры Order будут доступны через это свойство.
- LinqToSql загрузит свойство при первом его использовании.
- EntityFramework загрузит свойство, когда его об этом попросят (используя метод Load).
В обеих технологиях контекст - это то, что делает кэширование ... поэтому, если вы используете более одного экземпляра контекста, вы можете наблюдать разные экземпляры Customer, которые действительно представляют одного и того же Customer.
Решение ваших вопросов в комментариях. Я буду говорить о LinqToSql, но этот материал должен работать и в EntityFramework.
если я отключу отложенную загрузку, я так понимаю, кэширование данных все равно будет работать?
Да, это будет работать. Однако они не являются полностью независимыми.
Зависит ли очистка кеша данных от изменений в данных и времени?
Нет очистки или сброса кеша. Если вы хотите новый кеш, вам нужно создать новый DataContext. Каждый экземпляр DataContext имеет свой собственный кеш.
- Есть способ вытащить обновить кеш с изменениями в базе данных ака - Обновить .
- Нет способа отправить изменения из базы данных в кеш.