C# 缓存EF Poco对象不好?

C# 缓存EF Poco对象不好?,c#,entity-framework,caching,memorycache,C#,Entity Framework,Caching,Memorycache,直接使用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缓存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);
受保护的对象缓存
{
得到
{
返回MemoryCache.Default;
}
}
列表数据=getCategories();
添加(新的缓存项(键、数据)、策略);

或者建议在这两者之间使用另一个转换器类来缓存这个类而不是Poco类本身?

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


另外,请确保在更新数据时具有良好的缓存逐出策略。如果在web场中运行应用程序,使用内存缓存可能会非常、非常、非常棘手。

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