网站大量收购独家精品文档,联系QQ:2885784924

EF_Code_First:二级缓存.pdf

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EF_Code_First:二级缓存

EF Code First:二级缓存(1) 缓存对于一个系统来说至关重要,但是是 EF 到版本 6 了仍然没有见到有支持查询结果缓存 机制的迹象。EF4 开始会把查询语句编译成存储过程缓存在 Sql Server 中,据说 EF6中对 此做了改进,会把 Linq To Entities 的查询条件直接编译缓存在 EF 中。但是这些都是只 是对查询条件做了缓存,而不是缓存查询的结果集(DbSet.Find(object key)那个虽然走 了 DbSet.Local 数据集,但也仅支持通过主键查找单个实体的情况,很有局限性),没有 达到我们想要的效果。 一、前言 今天我们来谈谈EF的缓存问题。 缓存对于一个系统来说至关重要,但是是EF到版本6了仍然没有见到有支持查询结果缓存机制的迹象。 EF4开始会把查询语句编译成存储过程缓存在Sql Server 中,据说EF6 中对此做了改进,会把Linq To Entities 的查询条件直接编译缓存在EF中。但是这些都是只是对查询条件做了缓存,而不是缓存查询的 结果集(DbSet.Find(object key)那个虽然走了DbSet.Local数据集,但也仅支持通过主键查找单个实体 的情况,很有局限性),没有达到我们想要的效果。 EF不加缓存功能,可能也有另外的考虑吧,这里不去猜测。虽然EF团队没有在EF中加入缓存功能,但 已经给出的缓存功能的扩展,这就是Community Entity Framework Provider Wrappers,这个扩展的工 作原理由下图可以清晰的了解: 该扩展提供了跟踪SQL运行日志与SQJ结果集缓存的功能,这里,我们只用到它的缓存功能来为EF建立 二级缓存的支持。 二、缓存设计 (一) 引用 EFProviderWrappers 如下图,在NuGet中只提供了 Entity Framework Provider Wrapper Toolkit(基础类库)与 Entity Framework Tracing Provider(日志跟踪)的下载,很遗憾的并没有提供 Entity Framework Caching Provider(缓存)。 我们只能自己动手来引用了,这里提供几种思路:  到 /EFProviderWrappers 下载代码,自行编译,然后在项目 GMF.Component.Data项目中手动引用EFProviderWrapperToolkit.dll与 EFCachingProvider.dll文件。  EFProviderWrapperToolkit由NuGet下载,EFCachingProvider手动引用。 我是觉得两种思路都挺麻烦的,这个扩展的代码貌似已经不更新了(3/18/2011),而且在 GMF.Component.Data中额外的引用两个程序集也是个麻烦事,于是我用下面的方法来引用: 在GMF.Component.Data项目中新建两个文件夹,把以上源代码中的两个工程以文件夹的形式包含 到项目中。 这样,似乎更干净利落,如图: (二) 缓存代码分析及整合 1. 关键代码简介 在EFCachingProvider中,我们要用到的核心类有三个:  ICache:缓存缓存基类,系统中实现了一个内存缓存类(InMemoryCache),适用于单台服务器 的缓存实现,如果要实现分布式缓存,可以从这个基类进行扩展。 o InMemoryCache:内存缓存实现类,内部使用了一个Dictionarystring, CacheEntry 作为缓存容器,以查询的SQL语句及参数的连接字符串(或其MD5值)为键 (EFCachingCommands.cs类中定义)。还包含了缓存命中、缓存项数量等数据的统计 及缓存清理功能。  CachingPolicy:缓存策略基类,定

文档评论(0)

ayangjiayu4 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档