EF 二级缓存 EFSecondLevelCache
2016-12-29 13:30
1171 查看
EFSecondLevelCache ======= Entity Framework 6.x Second Level Caching Library. 二级缓存是一个查询缓存。EF命令的结果将存储在缓存中,这相同的EF命令将从缓存中检索数据,而不是执行它们对数据库了。 使用方法: 1- 设置缓存失效通过重写SaveChanges方法防止过期写道 namespace EFSecondLevelCache.TestDataLayer.DataLayer { public class SampleContext : DbContext { // public DbSet<Product> Products { get; set; } public SampleContext() : base("connectionString1") { } //重写 SaveChanges public override int SaveChanges() { return SaveAllChanges(invalidateCacheDependencies: true); } public int SaveAllChanges(bool invalidateCacheDependencies = true) { var changedEntityNames = getChangedEntityNames(); var result = base.SaveChanges(); if (invalidateCacheDependencies) { new EFCacheServiceProvider().InvalidateCacheDependencies(changedEntityNames); } return result; } //修改、删除、添加数据时缓存失效 private string[] getChangedEntityNames() { return this.ChangeTracker.Entries() .Where(x => x.State == EntityState.Added || x.State == EntityState.Modified || x.State == EntityState.Deleted) .Select(x => System.Data.Entity.Core.Objects.ObjectContext.GetObjectType(x.Entity.GetType()).FullName) .Distinct() .ToArray(); } } } 有时你不想缓存失效时非更新NumberOfViews等重要性质。 在这些情况下,试着SaveAllChanges(invalidateCacheDependencies:false),之前更新数据。 2- 然后正常查询缓存的结果: var products = context.Products.Include(x => x.Tags).FirstOrDefault(); 我们可以使用新的“缓存()的扩展方法: var products = context.Products.Include(x => x.Tags).Cacheable().FirstOrDefault(); // Async methods are supported too. 注意: 适合使用全球网站的查询缓存设置,公共的文章或评论列表 而不是经常改变,私人或特定的数据,每个用户。 如果一个页面需要身份验证,其数据不应该被缓存。 开源地址: https://github.com/VahidN/EFSecondLevelCache[/code]
相关文章推荐
- 【找集中式缓存做hibernate second level cache和业务缓存失败】
- hibernate_二级缓存(second cache)
- org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage
- spring+hibernate+Jboss treeCache配置二级缓存(一)
- 【第五篇】Volley代码修改之图片二级缓存以及相关源码阅读(重写ImageLoader.ImageCache)
- hibernate二级缓存:hibernate3 2级缓存Cache的配置及测试
- 异常:org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hiber
- SpringBank 开发日志 Mybatis 使用redis 作为二级缓存时,无法通过cacheEnabled=false 将其关闭
- hibernate二级缓存:hibernate3学习笔记( 2十一)| 2级缓存Cache
- org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage
- 二级缓存(L2 CACHE)
- spring mybatis mvc cache 缓存 二级缓存
- org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled
- 在hibernate中使用二级缓存的时候指定CacheConcurrencyStrategy.READ_WRITE修改后接着用for-each 或 iterator访问时报错ConcurrentMod
- EF-Code First(5):二级缓存
- Second-level cache is not enabled for usage 异常
- YYCache,TMCache,SDImageDiskCache的比较以及二级缓存分析
- Second Level Cache for Entity Framework 6.1
- mybatis源码分析(7)-----缓存Cache(一级缓存,二级缓存)
- JAR——ASimpleCache二级缓存