/// <summary>
        /// Generates the identity value
        /// </summary>
        /// <param name="db">MongoDatabase instance</param>
        /// <param name="collectionName">Collection Name</param>
        /// <returns>Generated identity</returns>
        public long GenerateId(IMongoDatabase db, string collectionName)
        {
            HiLoIdGenerator value;

            //if (keyGeneratorsByTag.TryGetValue(collectionName, out value))
            //    return value.GenerateId(collectionName);

            lock (generatorLock)
            {
                if (keyGeneratorsByTag.TryGetValue(collectionName, out value))
                    return value.GenerateId(collectionName, db);

                value = new HiLoIdGenerator(_capacity);
                // doing it this way for thread safety
                keyGeneratorsByTag = new Dictionary<string, HiLoIdGenerator>(keyGeneratorsByTag)
                {
                    {collectionName, value}
                };
            }

            return value.GenerateId(collectionName, db);
        }
        /// <summary>
        /// Generates the identity value
        /// </summary>
        /// <param name="db">MongoDatabase instance</param>
        /// <param name="collectionName">Collection Name</param>
        /// <returns>Generated identity</returns>
        public long GenerateId(IMongoDatabase db, string collectionName)
        {
            HiLoIdGenerator value;

            //if (keyGeneratorsByTag.TryGetValue(collectionName, out value))
            //    return value.GenerateId(collectionName);

            lock (generatorLock)
            {
                if (keyGeneratorsByTag.TryGetValue(collectionName, out value))
                {
                    return(value.GenerateId(collectionName, db));
                }

                value = new HiLoIdGenerator(_capacity);
                // doing it this way for thread safety
                keyGeneratorsByTag = new Dictionary <string, HiLoIdGenerator>(keyGeneratorsByTag)
                {
                    { collectionName, value }
                };
            }

            return(value.GenerateId(collectionName, db));
        }