缓存 EF Poco 对象不好吗?

caching EF Poco objects is bad?

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

例如,我创建了一个名为 category

的 Poco class
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);

或者是否建议在两者之间使用另一个转换器 class 并缓存此 class 而不是 Poco class 本身?

缓存昂贵的数据库调用的结果没有错。只需确保这些对象已预先初始化,以便稍后当您尝试从缓存中读取它们时,它们不需要打开的 DbContext。如果您还没有完全初始化存储在缓存中的对象,EF 的延迟加载可能会给您带来麻烦。

另外请确保您在更新数据时具有良好的缓存逐出策略。使用 In-memory 缓存,如果您 运行 您的应用程序在 web-farm.

中,事情可能会变得非常、非常、非常棘手