Есть ли конфликт при использовании кэширования данных и отложенной загрузки? - PullRequest
2 голосов
/ 28 января 2009

Если я планирую использовать кэширование данных, нужно ли беспокоиться о конфликтах при использовании отложенной загрузки? Кажется, с linq я теряю контроль над своими данными.

1 Ответ

2 голосов
/ 28 января 2009

LinqToSql и EntityFramework предоставляют обе функции (отложенная загрузка и кэширование данных).

Например, если вы изначально загрузите клиента, этот клиент будет кэширован, и если вы запросите его снова, вы получите тот же экземпляр.

Если вы не загрузите Заказы Клиента во время этой начальной загрузки, то свойство Orders этого экземпляра Клиента будет в незагруженном состоянии. Когда вы загрузите эти заказы, экземпляры Order будут доступны через это свойство.

  • LinqToSql загрузит свойство при первом его использовании.
  • EntityFramework загрузит свойство, когда его об этом попросят (используя метод Load).

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


Решение ваших вопросов в комментариях. Я буду говорить о LinqToSql, но этот материал должен работать и в EntityFramework.

если я отключу отложенную загрузку, я так понимаю, кэширование данных все равно будет работать?

Да, это будет работать. Однако они не являются полностью независимыми.

Зависит ли очистка кеша данных от изменений в данных и времени?

Нет очистки или сброса кеша. Если вы хотите новый кеш, вам нужно создать новый DataContext. Каждый экземпляр DataContext имеет свой собственный кеш.

  • Есть способ вытащить обновить кеш с изменениями в базе данных ака - Обновить .
  • Нет способа отправить изменения из базы данных в кеш.
...