/// <summary>
        /// Gets the most recent snapshot for the specified <paramref name="streamId"/> and <paramref name="maximumVersion"/>.
        /// </summary>
        /// <param name="type">The snapshot type.</param>
        /// <param name="streamId">The unique stream identifier.</param>
        /// <param name="maximumVersion">The maximum snapshot version.</param>
        public Snapshot GetSnapshot(Type type, Guid streamId, Int32 maximumVersion)
        {
            Verify.NotNull(type, nameof(type));
            Verify.NotDisposed(this, disposed);

            using (var command = dialect.CreateCommand(dialect.GetSnapshot))
            {
                Log.Trace("Getting stream {0} snapshot with version less than or equal to {1}", streamId, maximumVersion);

                command.Parameters.Add(dialect.CreateStreamIdParameter(streamId));
                command.Parameters.Add(dialect.CreateVersionParameter(maximumVersion));

                return(dialect.QuerySingle(command, record => CreateSnapshot(type, record)));
            }
        }
        /// <summary>
        /// Creates a <see cref="DataTable"/> based on the required insert/update command parameters.
        /// </summary>
        private static DbBatchOperation CreateBuffer(IStoreSnapshotSettings settings, ISnapshotStoreDialect dialect)
        {
            using (var command = dialect.CreateCommand(settings.ReplaceExisting ? dialect.ReplaceSnapshot : dialect.InsertSnapshot))
            {
                command.Parameters.Add(dialect.CreateStreamIdParameter(default(Guid)));
                command.Parameters.Add(dialect.CreateVersionParameter(default(Int32)));
                command.Parameters.Add(dialect.CreateStateParameter(default(Byte[])));

                return(new DbBatchOperation(dialect, command, settings.BatchSize, settings.FlushInterval));
            }
        }
        /// <summary>
        /// Creates a <see cref="DataTable"/> based on the required insert/update command parameters.
        /// </summary>
        private static DbBatchOperation CreateBuffer(IStoreSnapshotSettings settings, ISnapshotStoreDialect dialect)
        {
            using (var command = dialect.CreateCommand(settings.ReplaceExisting ? dialect.ReplaceSnapshot : dialect.InsertSnapshot))
            {
                command.Parameters.Add(dialect.CreateStreamIdParameter(default(Guid)));
                command.Parameters.Add(dialect.CreateVersionParameter(default(Int32)));
                command.Parameters.Add(dialect.CreateStateParameter(default(Byte[])));

                return new DbBatchOperation(dialect, command, settings.BatchSize, settings.FlushInterval);
            }
        }