/// <summary>
        /// Executes <see cref="DeleteQuery{T}"/>>, removes object from database and cache
        /// </summary>
        /// <param name="stmt"></param>
        /// <typeparam name="TEntity"></typeparam>
        public void Delete <TEntity>(DeleteQuery <TEntity> stmt)
        {
            var conn = _connection;

            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            using var cmd   = conn.CreateCommand();
            cmd.CommandText = stmt.AsSqlString();
            cmd.Transaction = _transaction;
            foreach (var(type, id, value) in stmt.GetParameters())
            {
                var param = cmd.CreateParameter();
                param.Value         = value;
                param.DbType        = type;
                param.ParameterName = id;
                cmd.Parameters.Add(param);
            }
            var affectedRows = cmd.ExecuteNonQuery();
        }