Как заставить Entity Framework кэшировать некоторые объекты - PullRequest
29 голосов
/ 18 июля 2009

Я использую Entity Framework.

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

Ответы [ 3 ]

39 голосов
/ 18 июля 2009

Как уже говорил Лухманн, у моего друга Jarek есть отличный пример кеширующего провайдера для Entity Framework. О котором он говорит о здесь .

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

Если вы попытаетесь сделать это, основная проблема, с которой вы столкнетесь, заключается в том, что экземпляр Entity Framework может быть присоединен только к одному ObjectContext за раз, что означает, что если вы получаете параллельные запросы (как на веб-сайте), вы будете есть проблемы - вы просто берете предметы из кеша и используете их вслепую.

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

Я собрал совет, который иллюстрирует, как это сделать Совет 14 - Как кэшировать справочные данные Entity Framework

Надеюсь, это поможет

Алекс Джеймс

Entity Framework Team, Microsoft.

8 голосов
/ 18 июля 2009
0 голосов
/ 18 июля 2009

Я бы сначала кешировал этот список стран и назначил соответствующую страну каждому найденному человеку. Если вы решили также кэшировать людей, вы должны сделать так, чтобы они зависели от кэшированных стран и аннулировали их при внесении каких-либо изменений в список стран / стран.

...