Beispiel #1
0
        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);
            });
        }
Beispiel #2
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());
            });
        }
Beispiel #3
0
        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);
            });
        }
Beispiel #4
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());
            });
        }