/// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Id"></param>
        /// <param name="item"></param>
        /// <param name="activeTransaction"></param>
        /// <returns></returns>
        public HttpResponseMessage GenericPut <T>(int Id, T item, IDbTransaction activeTransaction = null) where T : class
        {
            HttpResponseMessage response;

            // descobrir campo chave e saber valor
            // se o valor do parametro nao for igual ao do campo chave
            // é erro, logo nem avança
            if (DatabaseHelpers.GetKeyValueOf(item) != Id)
            {
                ApiStatusResponse errorResponse = new ApiStatusResponse()
                {
                    Code   = "101",
                    Detail = "Está a tentar executar a actulização de um objecto, mas tem incomsistência entre a chave do objecto e o ID do Uri",
                    Title  = "Uri Inválido",
                    Type   = "error"
                };

                response = Controller.Request.CreateResponse(HttpStatusCode.BadRequest, errorResponse);
            }
            else
            {
                DbTable <T> tblData = new DbTable <T>(DBContext, UserID);

                try
                {
                    var itemIns = tblData.Update(item, activeTransaction);
                    tblData = null;

                    if (itemIns == null)
                    {
                        // não update, mas não deu erro... portanto elemento não existe
                        ApiStatusResponse errorResponse = new ApiStatusResponse()
                        {
                            Code   = "102",
                            Detail = "Está a tentar executar a actulização de um objecto, mas o objecto não existe",
                            Title  = "Operação Inválida",
                            Type   = "error"
                        };

                        response = Controller.Request.CreateResponse(HttpStatusCode.NotFound, errorResponse);
                    }
                    else
                    {
                        ApiDataResponse res = new ApiDataResponse();
                        res.data            = item;
                        res.recordsaffected = 1;

                        response = Controller.Request.CreateResponse <ApiDataResponse>(HttpStatusCode.OK, res);

                        // Erro no parametro request
                        //UrlHelper url = new UrlHelper();
                        //string uri = url.Link("DefaultApi", new { id = Id });

                        //response.Headers.Location = new Uri(uri);
                    }
                }
                catch (Exception ex)
                {
                    tblData  = null;
                    response = DefaultControllerException(Controller.Request, ex);
                }

                tblData = null;
            }
            return(response);
        }