public async Task SaveCollectionAsync()
        {
            var identities = new List <Identity> {
                IdentityGenerator.Default, IdentityGenerator.Generate(ObjectId.GenerateNewId().ToString())
            };
            await _identityRepository.SaveAsync(identities);

            var results = await _identityRepository.GetByIdsAsync(identities.Select(i => i.Id).ToList());

            Assert.Equal(2, results.Count);
        }
        public async Task GetByIdAnyIdsWithCache()
        {
            var identity = await _identityRepository.AddAsync(IdentityGenerator.Default);

            Assert.NotNull(identity?.Id);

            Assert.Equal(0, _cache.Count);
            Assert.Equal(0, _cache.Hits);
            Assert.Equal(0, _cache.Misses);

            Assert.Equal(identity, await _identityRepository.GetByIdAsync(identity.Id, useCache: true));
            Assert.Equal(1, _cache.Count);
            Assert.Equal(0, _cache.Hits);
            Assert.Equal(1, _cache.Misses);

            string cacheKey   = _cache.Keys.Single();
            var    cacheValue = await _cache.GetAsync <Identity>(cacheKey);

            Assert.True(cacheValue.HasValue);
            Assert.Equal(identity, cacheValue.Value);

            var results = await _identityRepository.GetByIdsAsync(new[] { identity.Id }, useCache : true);

            Assert.Equal(1, results.Count);
            Assert.Equal(identity, results.First());
            Assert.Equal(1, _cache.Count);
            Assert.Equal(2, _cache.Hits);
            Assert.Equal(1, _cache.Misses);
            cacheValue = await _cache.GetAsync <Identity>(cacheKey);

            Assert.True(cacheValue.HasValue);
            Assert.Equal(identity, cacheValue.Value);

            await _identityRepository.InvalidateCacheAsync(identity);

            Assert.Equal(0, _cache.Count);
            Assert.Equal(3, _cache.Hits);
            Assert.Equal(1, _cache.Misses);

            results = await _identityRepository.GetByIdsAsync(new[] { identity.Id }, useCache : true);

            Assert.Equal(1, results.Count);
            Assert.Equal(identity, results.First());
            Assert.Equal(1, _cache.Count);
            Assert.Equal(3, _cache.Hits);
            Assert.Equal(2, _cache.Misses);
            cacheValue = await _cache.GetAsync <Identity>(cacheKey);

            Assert.True(cacheValue.HasValue);
            Assert.Equal(identity, cacheValue.Value);

            Assert.Equal(identity, await _identityRepository.GetByIdAsync(identity.Id, useCache: true));
            Assert.Equal(1, _cache.Count);
            Assert.Equal(5, _cache.Hits);
            Assert.Equal(2, _cache.Misses);
            cacheValue = await _cache.GetAsync <Identity>(cacheKey);

            Assert.True(cacheValue.HasValue);
            Assert.Equal(identity, cacheValue.Value);
        }