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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM