private IEnumerable<LightningKeyValuePair> GetAll(string database)
        {
            var list = new List<LightningKeyValuePair>();
            var txn = GetReadonlyTransaction();

            var db = OpenDatabase(database);
            using (var cursor = txn.CreateCursor(db))
            {
                foreach (var item in cursor)
                {
                    var kv = new LightningKeyValuePair { Key = item.Key, Value = item.Value };
                    list.Add(kv);
                }
            }

            if (txn.State == LightningTransactionState.Active)
                txn.Reset();

            return list;
        }
        /// <summary>
        /// Gets the key-value pair identified by the specified key, from the specified database.
        /// </summary>
        /// <param name="database">The database.</param>
        /// <param name="key">The key.</param>
        /// <returns></returns>
        private LightningKeyValuePair Get(string database, byte[] key)
        {
            var txn = GetReadonlyTransaction();
            var db = OpenDatabase(database);
            var kv = new LightningKeyValuePair { Key = key };

            kv.Value = txn.Get(db, key);
            if (txn.State == LightningTransactionState.Active)
                txn.Reset();

            return kv;
        }
        private IEnumerable<LightningKeyValuePair> Get(string database, IEnumerable<byte[]> keys)
        {
            var list = new List<LightningKeyValuePair>();
            var txn = GetReadonlyTransaction();

            var db = OpenDatabase(database);
            using (var cur = txn.CreateCursor(db))
            {
                foreach (var key in keys)
                {
                    if (cur.MoveTo(key))
                    {
                        var kv = new LightningKeyValuePair
                        {
                            Key = key,
                            Value = cur.GetCurrent().Value
                        };

                        list.Add(kv);
                    }
                }
            }

            if (txn.State == LightningTransactionState.Active)
                txn.Reset();

            return list;
        }
 /// <summary>
 /// Updates the specified Lightning key-value pair, in the specified database.
 /// </summary>
 /// <param name="database">The database.</param>
 /// <param name="kv">The key-value pair.</param>
 /// <returns></returns>
 public async Task<int> UpdateAsync(string database, LightningKeyValuePair kv)
 {
     return await UpdateAsync(database, new[] { kv }).ConfigureAwait(false);
 }