public void TestSecondLevelCacheDoesNotHitTheDatabase() { int id = 20000; var databaseLog = new StringBuilder(); var uow = new SampleContext(); uow.Database.Log = commandLine => { databaseLog.AppendLine(commandLine); Trace.Write(commandLine); }; Trace.WriteLine("1st query, reading from db."); databaseLog.Clear(); var debugInfo1 = new EFCacheDebugInfo(); var list1 = uow.Set<User>() .OrderBy(x => x.Name) .Where(x => x.Id > id) .Cacheable(debugInfo1) .ToList(); var sqlCommands = databaseLog.ToString().Trim(); Assert.AreEqual(false, string.IsNullOrWhiteSpace(sqlCommands)); Assert.AreEqual(false, debugInfo1.IsCacheHit); Assert.IsNotNull(list1); var hash1 = debugInfo1.EFCacheKey.KeyHash; Trace.WriteLine("same query, reading from 2nd level cache."); databaseLog.Clear(); var debugInfo2 = new EFCacheDebugInfo(); var list2 = uow.Set<User>() .OrderBy(x => x.Name) .Where(x => x.Id > id) .Cacheable(debugInfo2) .ToList(); sqlCommands = databaseLog.ToString().Trim(); Assert.AreEqual(true, string.IsNullOrWhiteSpace(sqlCommands)); Assert.AreEqual(true, debugInfo2.IsCacheHit); Assert.IsNotNull(list2); var hash2 = debugInfo2.EFCacheKey.KeyHash; Trace.WriteLine("same query, reading from 2nd level cache."); databaseLog.Clear(); var debugInfo3 = new EFCacheDebugInfo(); var list3 = uow.Set<User>() .OrderBy(x => x.Name) .Where(x => x.Id > id) .Cacheable(debugInfo3) .ToList(); sqlCommands = databaseLog.ToString().Trim(); Assert.AreEqual(true, string.IsNullOrWhiteSpace(sqlCommands)); Assert.AreEqual(true, debugInfo3.IsCacheHit); Assert.IsNotNull(list3); var hash3 = debugInfo3.EFCacheKey.KeyHash; Assert.AreEqual(hash1, hash2); Assert.AreEqual(hash2, hash3); Trace.WriteLine("different query, reading from db."); databaseLog.Clear(); var debugInfo4 = new EFCacheDebugInfo(); var list4 = uow.Set<User>() .OrderBy(x => x.Name) .Where(x => x.Id > 20001) .Cacheable(debugInfo4) .ToList(); sqlCommands = databaseLog.ToString().Trim(); Assert.AreEqual(false, string.IsNullOrWhiteSpace(sqlCommands)); Assert.AreEqual(false, debugInfo4.IsCacheHit); Assert.IsNotNull(list4); var hash4 = debugInfo4.EFCacheKey.KeyHash; Assert.AreNotSame(hash3, hash4); uow.Dispose(); }