【问题标题】:caching EF Poco objects is bad?缓存 EF Poco 对象不好?
【发布时间】:2015-12-31 13:04:34
【问题描述】:

直接使用 MemoryCache 缓存 EF Poco 对象是一种好习惯吗?如果有,有什么缺点?

例如,我创建了一个名为 category 的 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 类本身?

【问题讨论】:

  • 为什么要缓存 POCO 对象? linq 延迟执行会让为您的数据存储多个位置的想法非常不舒服 - linq 让您始终在需要时正确获取数据,同时缓存旧条目并可能模拟您的 DbContext。
  • 例如,我想要缓存的数据,就像我的示例中的类别一样,不会经常更改。一个月内可能有 1 个条目。因此,如果我不想更新,请删除但只阅读。我什至可以每周刷新一次缓存。这些数据我认为是永久缓存的数据。

标签: c# entity-framework caching memorycache


【解决方案1】:

缓存昂贵的数据库调用的结果并没有错。只需确保这些对象被急切地初始化,以便稍后当您尝试从缓存中读取它们时,它们不需要打开的 DbContext。如果您尚未完全初始化已存储到缓存中的对象,EF 的延迟加载可能会咬您一口。

还要确保在更新数据时制定良好的缓存回收策略。如果您在 web-farm 中运行应用程序,使用内存缓存可能会变得非常、非常、非常棘手。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2011-04-01
    • 2012-08-04
    相关资源
    最近更新 更多