Entity Framework二级缓存

7
我想要使用EntityFramework.Cache 来缓存我的其中一个表,但我找不到任何关于它如何处理实时数据和关联表的信息?
我想知道如果我添加了一些数据到我的表或者关系表,它是否会理解并重新缓存表或者结果可能是过期的?
有人使用过任何Entity Framework的二级缓存吗?

请参考以下链接: https://msdn.microsoft.com/zh-cn/magazine/hh394143.aspx http://www.codeproject.com/Articles/435142/Entity-Framework-Second-Level-Caching-with-DbContext - LogicalDesk
1个回答

10

缓存通常会缓存实体(与上下文分离)并在缓存未过期的情况下重复使用相同的结果。

如果更改查询,则会缓存新结果(即使返回相同的实体键),因为关系可能已更改。

这里是你当前使用的缓存的替代方案:

免责声明: 我是 GitHub 上 EntityFramework Plus 项目的所有者。

EF+ 查询缓存允许带有标记、过期和缓存控制的查询缓存。

文档:Entity Framework - 二级缓存

编辑:回答评论

如果数据已更新,必须提供新信息,则可以从缓存中删除特定实体

对于 EF6,我们有内置的 IsAutoExpireCacheEnabled 选项:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    QueryCacheManager.IsAutoExpireCacheEnabled = true;
}

对于EF Core,我们还没有找到如何实现它的方法。


很好!有没有办法在上下文实例之间共享缓存? - user756037
@user756037,如果你谈论EF+查询缓存,它已经在上下文实例之间工作,因为项目是分离的。 - Jonathan Magnan
@JonathanMagnan 这个功能是否支持细粒度缓存失效?如果数据已更新,必须提供新信息,我们可以从缓存中删除特定实体,这对于可靠性非常重要。 - Douglas Gaskell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接