2015-12-31 3 views
1

Является ли хорошей практикой кэшировать объект EF Poco напрямую с помощью MemoryCache? Каковы недостатки, если они есть?Кэширование объектов EF Poco плохо?

, например, я создал класс Poco под названием категории

public partial class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; }   
    public string Description { get; set; } 
} 

затем добавить список категории в объект кэша, который является типом MemoryCache, как показано ниже

protected ObjectCache Cache 
{ 
    get 
    { 
     return MemoryCache.Default; 
    } 
} 

List<Category> data= getCategories(); 
Cache.Add(new CacheItem(key, data), policy); 

Или это предложил использовать другой класс преобразователя между кешем и классом, а не классом Poco?

+0

Почему вы хотите, чтобы ваши объекты POCO были кэшированы? Задержка выполнения linq заставила бы думать о том, что несколько мест хранения для ваших данных довольно неудобны - linq позволяет вам всегда получать ваши данные правильно, когда вам это нужно, в то время как вы кэшируете старые записи и, возможно, имитируете свой DbContext. – DevilSuichiro

+0

Например, данные, которые я хочу кэшировать, как и в моем примере, не часто меняются. Может быть, 1 запись в месяц. Поэтому, если я не хочу обновлять, удалять, а только читать. и я могу обновить кеш даже один раз в неделю. эти данные я считаю постоянными кэшированными данными. – batmaci

ответ

2

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

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

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