public function Update($model, array $campos = null)
    {
        $this->OpenTransaction();
        
        $data = clone $model;

        if (is_object($data))
            ModelState::ModelTreatment($data);

        $primaryKey = ModelState::GetPrimary($model);
        if($primaryKey == null)
            throw new OwlException("Classe nao contem PK");

        $table = $this->getTableName($data);

        $data = (array)$data;

        $novosDados = NULL;

        if($campos == null)
            $campos = array_keys($data);

        foreach ($campos as $key) {
            $novosDados .= "`$key`=:$key,";
        }

        $novosDados = rtrim($novosDados, ',');

        // Prepara a Query
        $sth = $this->prepare("UPDATE $table SET $novosDados WHERE $primaryKey = '".$model->$primaryKey."'");

        // Define os dados
        foreach ($campos as $key) {
            // Se o tipo do dado for inteiro, usa PDO::PARAM_INT, caso contr�rio, PDO::PARAM_STR
            $tipo = (is_int($model->$key)) ? \PDO::PARAM_INT : \PDO::PARAM_STR;

            // Define o dado
            $sth->bindValue(":$key",$model->$key, $tipo);
        }

        try {
            $sth->execute();
            $model = $this->GetById($table,$model->$primaryKey);
        }catch (\Exception $e){
            echo $e->getMessage();
        }
    }