EF 二级缓存 EFSecondLevelCache

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

 

转载于:https://www.cnblogs.com/louby/p/6232646.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值