2009-07-18 4 views
29

Я использую Entity Framework.Как заставить Entity Framework кэшировать некоторые объекты

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

+0

Bump. Что-то изменилось с EF за 5 лет, что касается кэширования таблицы поиска? В частности, имеет ли EF способ сделать это? – RLH

ответ

40

Как уже сказал Luhmann, мой помощник Jarek имеет превосходный поставщик кэширования образцов для платформы Entity Framework. Что он говорит о here.

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

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

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

я собрал совет, который показывает, как сделать это Tip 14 - How to cache Entity Framework Reference Data

Надеется, что это помогает

Алекс Джеймс

Entity Framework Team Microsoft.

+0

с того момента, как вы написали этот совет до сих пор, существует более простой способ кэширования опорных данных с помощью EF 4.1? – Romias

+3

Хороший отзыв Алекс, есть ли лучшие подходы к новым выпускам EF? – NoChance

0

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

Смежные вопросы