缓存 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.
中,事情可能会变得非常、非常、非常棘手
直接使用 MemoryCache 缓存 EF Poco 对象是一种好习惯吗?如果有缺点是什么?
例如,我创建了一个名为 category
的 Poco classpublic 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.
中,事情可能会变得非常、非常、非常棘手