public async Task TestSecondLevelCacheUsingTwoCountAsyncMethods(TestCacheProvider cacheProvider) { await EFServiceProvider.RunInContextAsync(cacheProvider, LogLevel.Debug, false, async (context, loggerProvider) => { var isActive = true; var name = "Product2"; var count = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .CountAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(count > 0); count = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .CountAsync(); Assert.AreEqual(1, loggerProvider.GetCacheHitCount()); Assert.IsTrue(count > 0); }); }
public async Task TestCacheAllQueriesWithNotCacheableWorks(TestCacheProvider cacheProvider) { await EFServiceProvider.RunInContextAsync(cacheProvider, LogLevel.Debug, true, async (context, loggerProvider) => { var isActive = true; var name = "Product1"; var list1 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .NotCacheable() .ToListAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list1.Any()); var list2 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .NotCacheable() .ToListAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list2.Any()); }); }
public async Task TestSecondLevelCacheUsingDifferentAsyncMethods(TestCacheProvider cacheProvider) { await EFServiceProvider.RunInContextAsync(cacheProvider, LogLevel.Debug, false, async (context, loggerProvider) => { var isActive = true; var name = "Product3"; var list1 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .ToListAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list1.Any()); var count = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .CountAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(count > 0); var product1 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .FirstOrDefaultAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(product1 != null); var any = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == "Product2") .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .AnyAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(any); var sum = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == "Product2") .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .SumAsync(x => x.ProductId); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(sum > 0); }); }
public async Task TestSecondLevelCacheUsingAsyncMethodsDoesNotHitTheDatabase(TestCacheProvider cacheProvider) { await EFServiceProvider.RunInContextAsync(cacheProvider, LogLevel.Debug, false, async (context, loggerProvider) => { var isActive = true; var name = "Product1"; var list1 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .ToListAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list1.Any()); var list2 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .ToListAsync(); Assert.AreEqual(1, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list2.Any()); var list3 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .ToListAsync(); Assert.AreEqual(1, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list3.Any()); var list4 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == "Product2") .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .ToListAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list4.Any()); var product1 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == "Product2") .Cacheable(CacheExpirationMode.Absolute, TimeSpan.FromMinutes(45)) .FirstOrDefaultAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsNotNull(product1); }); }
public async Task TestCacheableWorksWithSPs(bool useRedis) { await EFServiceProvider.RunInContextAsync(useRedis, LogLevel.Information, false, async (context, loggerProvider) => { var blogId = 1; var blogs = await context.Set <BlogData>() .FromSqlRaw("usp_GetBlogData {0}", blogId) .Cacheable() .ToListAsync(); Assert.IsTrue(blogs.Any()); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); blogs = await context.Set <BlogData>() .FromSqlRaw("usp_GetBlogData {0}", blogId) .Cacheable() .ToListAsync(); Assert.IsTrue(blogs.Any()); Assert.AreEqual(1, loggerProvider.GetCacheHitCount()); }); }
public async Task TestCacheInvalidationWorksWithSPs(bool useRedis) { await EFServiceProvider.RunInContextAsync(useRedis, LogLevel.Information, false, async (context, loggerProvider) => { var blogId = 1; var blogs = await context.Set <BlogData>() .FromSqlRaw("usp_GetBlogData {0}", blogId) .Cacheable() .ToListAsync(); Assert.IsTrue(blogs.Any()); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); blogs = await context.Set <BlogData>() .FromSqlRaw("usp_GetBlogData {0}", blogId) .Cacheable() .ToListAsync(); Assert.IsTrue(blogs.Any()); Assert.AreEqual(1, loggerProvider.GetCacheHitCount()); var product = new Product { IsActive = false, ProductName = $"Product{RandomNumberProvider.Next()}", ProductNumber = RandomNumberProvider.Next().ToString(), Notes = "Notes ...", UserId = 1 }; context.Products.Add(product); await context.SaveChangesAsync(); blogs = await context.Set <BlogData>() .FromSqlRaw("usp_GetBlogData {0}", blogId) .Cacheable() .ToListAsync(); Assert.IsTrue(blogs.Any()); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); }); }
public async Task TestCacheAllQueriesWorks(bool useRedis) { await EFServiceProvider.RunInContextAsync(useRedis, LogLevel.Information, true, async (context, loggerProvider) => { var isActive = true; var name = "Product1"; var list1 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .ToListAsync(); Assert.AreEqual(0, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list1.Any()); var list2 = await context.Products .OrderBy(product => product.ProductNumber) .Where(product => product.IsActive == isActive && product.ProductName == name) .ToListAsync(); Assert.AreEqual(1, loggerProvider.GetCacheHitCount()); Assert.IsTrue(list2.Any()); }); }